绑定方法与非绑定方法
在类内部定义的函数,分为两大类:
一:绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当做第一个参数自动传入
绑定到对象的方法:
在类内定义的没有被任何装饰器修饰的
绑定到类的方法:
在类内部定义的,被装饰器classmethod修饰的方法
二:非绑定方法:没有自动传值,就是类中定义的一个普通的工具,类和对象都可以使用
非绑定方法:不与类或者对象绑定
用staticmethod装饰器装饰的方法
class Foo:
def __init__(self, name):
self.name = name
def tell(self):
print('名字是%s' % self.name)
@classmethod
def func(cls):
print(cls)
@staticmethod
def func1(x, y):
print(x + y)
绑定方法和非绑定方法的应用。
依据函数体的逻辑来决定函数是绑定方法还是非绑定方法
import hashlib
import time
import settings
class People:
def __init__(self, name, age, sex):
self.id = self.creat_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 creat_id(): # 非绑定方法
m = hashlib.md5(str(time.time()).encode('utf-8'))
return m.hexdigest()
# p = People('wyq', 18, 'male')
# 绑定给对象,就应该由对象来调用,自动将对象本身当做第一个参数传入
# p.tell_info()
# 绑定给类,就应该由类来调用,自动将类本身当做第一个参数传入
# p = People.from_conf()
# p.tell_info()
# 非绑定方法,不与类或者对象绑定,谁都可以调用,没有自动传值
# p1 = People('wyq', 18, 'male')
# p2 = People('yqw', 19, 'male')
# p3 = People('qyw', 20, 'male')
#
# print(p1.id)
# print(p2.id)
# print(p3.id)