绑定方法和非绑定方法
绑定方法和非绑定方法
一、绑定方法
特殊之处:绑定给谁就是谁来调用,并且会把自身传过去
1.1 对象绑定方法
用来修改对象
1.2 类绑定方法
绑定给类,类来调用,会把类自身传过去(拿到一个类就得到一个对象)
class Person:
def __init__(self,name,age)
self.name = name
self.age = age
@classmethod #实质上就是一个装饰器,加上它,test函数就变成了累的绑定方法
def test(cls)
print('类的绑定方法')
Person.test() #类来调用
1.3 用处
不需要借助对象,只需要通过类就能获取到一些东西的时候eg:选课系统中拿到管理员的创建老师的姓名,对老师姓名进行修改的时候,就可以直接用类来调用,用对象来调用的话,多此一举,还是来看个例子吧!
class Admin:
def __init__(self,name,age):
print(self)
self.name=name
self.age=age
@classmethod
def get_obj_by_name(cls,name):
#取到类的名字
type_class=cls.__name__.lower() #获取到cls的名字,将名字变为小写
#1 去文件中查找名字为 name 的pickle文件
#2 反序列化成对象
#3 return 对象
pass
#对象的绑定方法
def get_obj_by_name1(self,name):
# 1 去文件中查找名字为 name 的pickle文件
# 2 反序列化成对象
# 3 return 对象
pass
admin=Admin.get_obj_by_name('yjy')
admin=Admin.get_obj_by_name1('ypp')
- 类的绑定方法可以用对象来调用(我们来看看用对象调用来实现这个例子显得有多无聊)
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod
def test(cls):
print(cls)
print('类的绑定方法')
p = Person('jiayi',20)
#对象可以调用类的绑定方法,也是把该对象的类传过去
p.test()
1.4 总结
-
classmethod
是装饰器,放在类中函数的上面,该函数就变成了类的绑定方法。 -
类的绑定方法由类来调用,自动把类传过去(对象可以调用类的绑定方法,但是一般不用)
二、非绑定方法(静态方法)
1.1 什么是非绑定方法
定义在类内部,给谁都不绑定(对象和类都可以调用但是不会自动传值)
class Person:
def __init__(self,name,age)
self.name = name
self.age = age
@staticmethod #当做一个普通函数,只不过是写在类内部
def test():
print('我是静态方法,谁都不绑定')
Person.test() #类来调用
Person('yjy',18).test() #对象来调用
1.2 作用
类里面有些东西,跟类和对象都没有关系的时候,可以定义成静态方法,一般定义在类内部使用,在类外部定义也可以。
- 就是一个普通函数,想把它拿到类中管理,就是他的静态方法。