12.8 类与对象的绑定方法和非绑定方法
- 绑定方法:方法绑定给对象使用。
- 对象的绑定方法:没有加任何装饰的方法就是对象的绑定方法;只有对象能用,类也能使用,类使用时必须传参数。
- 类的绑定方法:加了@classmethod装饰器的方法就是类的绑定方法;类能使用,对象也能使用,但是数据类型依然是类;不需要传入参数。
- 非绑定方法: 加了@staticmethod装饰器的方法就是非绑定方法,也就是一个普通函数。
class Foo:#绑定给对象:只有对象能用,类也能使用,类使用时必须传参数def f1 (self):print(self)@classmethod #让被装饰的函数给类使用,不需要加参数,约定俗成参数为cls#绑定给类的方法类能使用,对象也能使用,但是参数依然是类。def f2(cls): print(cls)#什么都不绑定的,非绑定方法,定义了普通函数。@staticmethoddef f3(self): #和普通函数一样print(self)def f1 (aa):print(aa)#绑定给对象
f=Foo()
f.f1()
#输出:<__main__.Foo object at 0x000001AF5C9E9640>#绑定给类
Foo.f2()
#输出:<class '__main__.Foo'>
# Foo.f1(11) #不这样调用f.f2()
#输出: <class '__main__.Foo'>#非绑定方法
Foo.f3(22)
#22
f.f3('fff')
#输出:fff
-
什么时候使用对象的绑定方法?
如果这个方法需要使用对象作为参数的时候,就得使用对象绑定方法。 -
什么时候使用类的绑定方法 ?
这个方法需要使用类作为参数,就得使用类绑定方法:@classmethod。 -
什么时候使用非绑定方法?
这个方法就不需要类作为参数,又不需要对象作为参数使用非绑定方法:@staticmethod。