类中定义的函数分成两大类
一:绑定方法(绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数传入):
-
绑定到类的方法:用classmethod装饰器装饰的方法。
- 绑定到对象的方法:在类内定义的没有被任何装饰器修饰的
二:非绑定方法
非绑定方法:不与类或对象绑定,没有自动传值一说,就是类中定义的一个普通工具,类和对象都能使用
class Foo: def __init__(self, name): self.name = name def tell(self): print('名字是%s' %self.name) @classmethod def func(cls): # cls是class的缩写,提示这是绑定到类的方法 cls=Foo print(cls) @staticmethod def func1(x, y): return x + y # 绑定到对象的方法,对象是调用者,直接把对象作为参数传入 f = Foo('egon') print(Foo.tell) # <function Foo.tell at 0x0000027FCC1A8840> print(f.tell) # <bound method Foo.tell of <__main__.Foo object at 0x0000027FCC101390>> # 绑定到类的方法,类是调用者,直接把类作为参数传入 print(Foo.func()) # <class '__main__.Foo'> print(Foo) # <class '__main__.Foo'> # 非绑定方法,不存在自动传值一说,类和对象都能调用 print(Foo.func1) # <function Foo.func1 at 0x0000025AF41F8BF8> print(f.func1) # <function Foo.func1 at 0x0000025AF41F8BF8>