ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Python3建议使用新式类继承object(广度优先搜索属性) ## 1. 类属性 类和对象创建后的属性存在于__dict__魔法属性当中。当使用属性时,回去这个__dict__(词典)当中去寻找 ![](https://box.kancloud.cn/02dbf2a2f3b34fae10ccf17f0d911316_704x326.png) 如果是后加入的属性,解释器会调用__getattr__方法去寻找属性 ### 1.1 定义类属性 定义在方法外的属性,是类属性。类的实例和类对象都可以访问 ~~~ lass People(object): name = 'Tom' #公有的类属性 __age = 12 #私有的类属性 def __init__(self): self.word = "hello" # 实例属性 p = People() print(p.name) #正确 print(People.name) #正确 print(p.word) # print(People.word) # 错误类对象不可以访问对象属性 # print(p.__age) #错误,不能在类外通过实例对象访问私有的类属性 # print(People.__age) ~~~ ## 2. 类方法 是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问。 ~~~ class People(object): country = 'china' #类方法,用classmethod来进行修饰 @classmethod def getCountry(cls): return cls.country p = People() print p.getCountry() #可以用过实例对象引用 print People.getCountry() #可以通过类对象引用 ~~~ ## 3. 静态方法 需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数 class People(object): country = 'china' @staticmethod #静态方法 def getCountry(): return People.country print People.getCountry() ## 4. 类方法、对象方法和静态方法区别 > 1. 从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法 > 2. 而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。 > 3. 静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用 > 4. 静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。可以理解为将静态方法存在此类的名称空间中。