'''
在类内部定义的函数,分为两大类:
一:绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数自动传入
1. 绑定到对象的方法:在类内定义的没有被任何装饰器修饰的
2. 绑定到类的方法:在类内定义的被装饰器@classmethod修饰的方法
二:非绑定方法:没有自动传值这么一说了,就类中定义的一个普通工具,对象和类都可以使用
非绑定方法:不与类或者对象绑定,在类内定义的被装饰器@staticmethod修饰的方法
说明:未做任何修饰时:在类内定义的方法是绑定给对象的,对象调用时,不需要传自己给self. 类调用类的方法时,需要传self(对象)给第一个参数。
'''
class Foo: def __init__(self,name): self.name=name def tell(self): print('名字是%s' %self.name) @classmethod def func(cls): #cls=Foo print(cls) @staticmethod def func1(x,y): print(x+y) f=Foo('egon') # print(Foo.tell) # Foo.tell(f) # print(f.tell) # f.tell() # print(Foo.func) # Foo.func() # print(Foo.func1) # print(f.func1) Foo.func1(1,2) f.func1(1,3)
应用:
import settings import hashlib import time class People: def __init__(self,name,age,sex): self.id=self.create_id() self.name=name self.age=age self.sex=sex def tell_info(self): #绑定到对象的方法 print('Name:%s Age:%s Sex:%s' %(self.name,self.age,self.sex)) @classmethod def from_conf(cls): obj=cls( settings.name, settings.age, settings.sex ) return obj @staticmethod def create_id(): m=hashlib.md5(str(time.time()).encode('utf-8')) return m.hexdigest() # p=People('egon',18,'male') #绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入 # p.tell_info() #tell_info(p) #绑定给类,就应该由类来调用,自动将类本身当作第一个参数传入 # p=People.from_conf() #from_conf(People) # p.tell_info() #非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说 p1=People('egon1',18,'male') p2=People('egon2',28,'male') p3=People('egon3',38,'male') print(p1.id) print(p2.id) print(p3.id)