绑定方法和非绑定方法

绑定方法和非绑定方法

一、绑定方法

特殊之处:绑定给谁就是谁来调用,并且会把自身传过去

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 作用

类里面有些东西,跟类和对象都没有关系的时候,可以定义成静态方法,一般定义在类内部使用,在类外部定义也可以。

  • 就是一个普通函数,想把它拿到类中管理,就是他的静态方法。
原文地址:https://www.cnblogs.com/yanjiayi098-001/p/11429751.html