• 绑定方法和非绑定方法


    一、绑定方法


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

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


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

    • 就是一个普通函数,想把它拿到类中管理,就是他的静态方法。
     
  • 相关阅读:
    28.Implement strStr()【leetcod】
    35. Search Insert Position【leetcode】
    27. Remove Element【leetcode】
    20. Valid Parentheses【leetcode】
    14. Longest Common Prefix【leetcode】
    Java的String中的subString()方法
    charAt()的功能
    spring整合mybatis
    AOP
    代理模式
  • 原文地址:https://www.cnblogs.com/lulingjie/p/11528952.html
Copyright © 2020-2023  润新知