绑定方法与非绑定方法的介绍
在类内部定义的函数,分为两大类
一、绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数自动传入
绑定到对象的方法:在类内定义的没有被任何装饰器修饰的
绑定到类的方法:在类内部定义的被装饰器classmethod装饰的方法
二、非绑定方法:没有自动传值这一说了,就是类中定义的一个普通函数,对象和类都可以使用
非绑定方法:不与类或者对象绑定
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.func) # Foo.func() # print(Foo.func1) # print(f.func1) Foo.func1(1,2) # 类使用 f.func1(1,3) # 对象使用
绑定方法与非绑定方法的使用
原则:根据函数体的逻辑来确定传的参数
import settings import hashlib import time class Peeple: 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" % (self.name,self.age)) @classmethod def from_conf(cls): # 定义一个外部传入文件的功能,需要绑定到类 obj = cls( settings.name, settings.age, settings.sex ) return obj @staticmethod def create_id(): #定义一个获取ID的功能,属于普通函数,不需要绑定方法 m = hashlib.md5(str(time.time()).encode("utf-8")) return m.hexdigest() #p = Peeple("egon",19,"male") #绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入 #p.tell_info() #绑定给类,就应该由类来调用,自动将类本身当作第一个参数传入 #p = Peeple.from_conf() #p.tell_info() #非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值一说 p1 = Peeple("egon1",19,"male") p2 = Peeple("egon2",20,"male") p3 = Peeple("egon3",21,"male") print(p1.id) print(p2.id) print(p3.id)