# -*- coding: utf-8 -*-
# @File :
# @Author: dianxiaoer
# @Date : 2019/11/11
# @Desc : 类的属性、类的实例、类方法、实例方法、静态方法
# # 1、定义一个类
# class Person:
# pass
# # 2、创建实例
# zhangsan = Person()
# lisi = Person()
# # 3、实例属性
# zhangsan.name = "python"
# lisi.name = "C++"
# # 4、创建实例时候,__init__方法会被自动调用
# class Person:
# def __init__(self,name,age,gender):
# self.name = name
# self.age = age
# self.gender = gender
# # 5、属性的访问限制
# # python中定义的普通变量,可以被外部访问。但是有时候,定义的变量不希望被外部访问;
# # 如单下划线"_变量名",双下划綫"__变量名";
# # 6、类属性
# class Person:
# address = "Mars"
# def __init__(self,name):
# self.name = name
# print(Person.address) # 类属性直接绑定在类上面,可以不实例化直接进行 类名.属性 进行访问
# p = Person("C#")
# print(p.address) # 也可以实例化对象来访问
# # 7、类方法
# # @classmethod来标识,对于类方法,第一个参数必须是类对象;
# # 一般以cls作为第一个参数(当然可以用其他名称的变量,但我们一般习惯使用'cls'了);
# # 能够通过实例对象和类对象去访问;【此处注意】
# class People:
# # 类属性
# country = 'Mars'
# # 类方法
# @classmethod
# def getCountry(cls):
# return cls.country
#
# p = Person() # 实例化一个对象
# print(p.getCountry()) # 通过实例对象访问
# print(Person.country) # 通过类对象访问
# 7.1 类方法修改类的属性
# class People:
# # 类属性
# country = 'Mars'
#
# # 类方法
# @classmethod
# def getCountry(cls):
# return cls.country
#
# @classmethod # 修改类的属性,不要通过实例对象修改类的属性,没意义!!!而是给实例绑定了一个实例属性!!!
# def setCountry(cls,country):
# cls.country = country
#
#
# p = People() # 实例化一个对象
# print(p.getCountry()) # 通过实例对象访问
# print(People.country) # 通过类对象访问
# p.setCountry("Earth")
# print("#"*10)
# print(p.getCountry()) # 通过实例对象访问
# print(People.country) # 通过类对象访问
# 8、静态方法
# class People:
# country = 'Mars'
#
# @staticmethod
# def getCountry():
# return People.country
#
# p = People()
# print(p.getCountry()) # 通过实例对象访问静态方法
# print(People.getCountry()) # 通过类访问静态方法
# 9、为什么用静态方法???
# 静态方法用来存放逻辑性的代码,这些逻辑属于某个类但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作;
# 可以理解为将静态方法存在此类的名称空间中;
# 事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数,但这样会导致代码难以维护;
# import time
#
# class Timer:
# def __init__(self):
# pass
#
# @staticmethod
# def showTime():
# pass
# t = Timer()
# now = t.showTime()
# print(now)
# 10、总结
# (1) 类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;
# (2)实例方法的第一个参数是实例对象self,通过self引用的可能是类属性、也有可能是实例属性;
# 不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高;
# (3)静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类实例对象来引用;
python之类的属性、类的实例、类方法、实例方法、静态方法(25)
最新推荐文章于 2023-07-04 22:59:49 发布