例子分析
参照下面这个例子来了解这 4 种方法。
>>> class Root:
__total=0
def_init(self,v): #构造方法
seif. value =v
Root. total+=1
def show(self): #普通实例方法
print('self. value:',self. value)
print('Root. total:',Root. total)
@classmethod #修饰器,声明类方法
def classShowTotal(cls):#类方法
print(cls. total)
@staticmethod #修饰器,声明静态方法
def staticShowTotal(): #静态方法
print(Root. total)
>>>r=Root(3)
>>>r.classShowTotal() #通过对象来调用类方法
>>>r.staticshowTotal() #通过对象来调用静态方法
1
>>> r.show()
self._value:=3
Root. total=1
>>>rr=Root(5)
>>>Root.classShowTotal() #通过类名调用类方法
2
>>>Root.staticShowTotal() #通过类名调用静态方法
2
>>>Root.show() #试图通过类名直接调用实例方法,失败
TypeError: unbound method show() must be called with Root instance as first argument (got nothing instead)
>>> Root.show(r) #但是可以通过这种方法来调用方法并访问实例成员
self. value=3
Root. total=2
>>>Root.show(rr)#通过类名调用实例方法时为self参数显式传递对象名
self. value=5
Root. total=2
复制代码
复制代码
成员方法
成员方法有:对象的成员方法,类的成员方法。
这个就是对象的成员方法。对象的成员方法比较多,像def show(self):
也是对象的成员方法。所以说,有self
的就是对象的成员方法。
像这个就是类的成员方法。
这种没有写在方法里的,叫做类的数据成员。
类方法
@classmethod
def classShowTotal(cls): #类方法
print(cls. total)
复制代码
复制代码
这个是类的方法,定义类的方法需要加@classmethod
修饰器,用于声明是类的方法。括号中cls
是class
的缩写。
静态方法
@staticmethod #修饰器,声明静态方法
def staticShowTotal(): #静态方法
print(Root. total)
复制代码
复制代码
像静态方法的话,括号里没有东西且前面修饰器为@staticmethod
。类方法和静态方法需要加修饰器来声明是什么方法。
三个方法的功能差异
对象的成员方法可以对对象的数据成员和类的数据成员进行操作,换句话说,对象成员可以调用任何成员。类方法和静态方法只能调用类的成员。
>>>Root.show() #试图通过类名直接调用实例方法,失败
TypeError: unbound method show() must be called with Root instance as first argument (got nothing instead)
复制代码
复制代码
像这种用类调用对象成员方法是错误的,这样会报错。
评论