绑定方法与非绑定方法
在类内部定义的函数,分为两大类:
一、绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数自动传入
a、绑定到对象的方法:在类内部定义的没有内任何装饰器修饰的
b、绑定到类的方法:在类内部定义的被装饰器classmethod修饰的
二、非绑定方法:没有自动传值,就是类中定义的一个普通工具,对象和类都可以使用 (被装饰器staticmethod修饰)
非绑定方法:不与类或者对象绑定(类和对象都可用)。
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("alex")
# # print(Foo.tell)
# # Foo.tell(f)
# # print(f.tell) # 绑定方法的特殊之处是绑定给谁就由谁来调用,自动传入第一个参数
#
# print(Foo.func)
# Foo.func()
# print(Foo)
print(Foo.func1)
print(f.func1)
Foo.func1(1,2)
f.func1(1,3)
使用场景
import settings,hashlib,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("alex",18,"male")
# # 绑定给对象,就应该由对象来调用,自动将对象本身当作第一个参数传入
# p.tell_info() #tell_info(p)
# # 绑定给类,就应该由类来调用,自动将类本身当作第一个参数传入
# p = People.from_conf() # from_conf(People)
# p.tell_info()
# 非绑定方法,不与类或对象绑定,谁都可以调用,没有自动传值一说
p1 = People("alex1",18,"male")
p2 = People("alex2",28,"male")
p3 = People("alex3",38,"male")
print(p1.id)
print(p2.id)
print(p3.id)

浙公网安备 33010602011771号