1 在类内部定义的函数,分为两大类 2 一:绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当做第一个参数自动传入 3 绑定到对象的方法:在类内定义的没有被任何装饰器修饰的 4 绑定到类的方法:在类内定义的被装饰器classmethod修饰的方法 5 二:非绑定方法(staticmethod):没有自动传值这么一说,就是类中定义的一个普通函数,对象和类都能使用 6 非绑定方法:不与类或者对象绑定,谁都可以调用,参数该怎么传就怎么传
1 class Foo: 2 def __init__(self,name): 3 self.name = name 4 def tell(self): 5 print("名字是%s"%self.name) 6 @classmethod #绑定到类的方法,类在使用时会将类本身当作参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入) 7 def func(cls):#cls = Foo 8 print(cls) 9 @staticmethod # 非绑定方法,不与类或对象绑定,谁都可以调用,,没有自动传值效果,就是普通函数 10 def func1(x,y): 11 print(x+y) 12 f = Foo(‘egon‘) 13 # print(Foo.tell)#<function Foo.tell at 0x0000000001E750D0> 14 # print(f.tell)#<bound method Foo.tell of <__main__.Foo object at 0x0000000001E6ACC0>> 15 # print(Foo.func)#<bound method Foo.func of <class ‘__main__.Foo‘>> 16 # print(f.func)#<bound method Foo.func of <class ‘__main__.Foo‘>> 17 18 # print(Foo.func1)#<function Foo.func1 at 0x00000000027A5488> 19 # print(f.func1)#<function Foo.func1 at 0x00000000027A5488> 20 # Foo.func1(1,2)#3 21 # f.func1(1,2)#3
1 import settings,time,hashlib 2 #settings存储人员信息 3 class People: 4 def __init__(self,name,age,sex): 5 self.id = self.creat_id() 6 self.__name = name 7 self.__age = age 8 self.__sex = sex 9 @property 10 def tell_info(self): 11 print(‘Name:%s Age:%s Sex:%s‘ %(self.__name,self.__age,self.__sex)) 12 @classmethod 13 def from_conf(cls):#cls = People 14 obj = cls( 15 settings.name, 16 settings.age, 17 settings.sex 18 ) 19 return obj 20 @staticmethod 21 def creat_id(): 22 m = hashlib.md5(str(time.time()).encode(‘utf-8‘)) 23 return m.hexdigest() 24 #绑定给类,就应该由类来调用,自动将类本身当作第一个参数传入 25 p = People.from_conf() 26 #绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入 27 p.tell_info #Name:grace Age:20 Sex:femal 28 print(p.id)#54346551b06e6c324dcc5a940bdef09c 29 #非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说 30 p1 = People(‘egon‘,18,‘male‘) 31 p1.tell_info#Name:egon Age:18 Sex:male 32 print(p1.id)#54346551b06e6c324dcc5a940bdef09c