一、在类内部定义的函数,分为两大类:
1、绑定方法,绑定给谁,就应该由谁来调用,谁来调用就会把调用者当做第一个参数自动传入
绑定到对象的方法:在类内定义的没有被任何装饰器的方法
1 class Foo: 2 def __init__(self, name): 3 self.name = name 4 5 def tell(self): 6 print('名字是%s' % self.name) 7 8 f = Foo('abc') 9 print(Foo.tell)10 def func():pass11 print(func)12 print(f.tell)13 14 结果为:1516 17 >
类里面定义的函数与对类来说与普通函数来说没有什么区别,一般是绑定到对象的,
绑定到类的方法:在类内定义的被装饰器classmethod修饰的方法
1 class Foo: 2 def __init__(self, name): 3 self.name = name 4 5 def tell(self): 6 print('名字是%s' % self.name) 7 8 @classmethod 9 def func(cls): # cls = Foo10 print(cls)11 12 print(Foo.func)13 14 结果为:15 16>
可以直接执行Foo.func(),结果为:
2、非绑定方法:没有自动传值这么一说了,就是类中定义的一个普通工具,对象和类都可以使用
非绑定方法:不与类或者对象绑定
1 class Foo: 2 def __init__(self, name): 3 self.name = name 4 5 def tell(self): 6 print('名字是%s' % self.name) 7 8 @classmethod 9 def func(cls):10 print(cls)11 12 @staticmethod13 def func1(x, y):14 return x + y15 16 # print(Foo.func)17 # Foo.func()18 f = Foo('abc')19 print(Foo.func1)20 print(f.func1)21 22 结果为:23 2425
Foo.func1(1, 2) f.func1(1, 3) 结果为:
1 32 4