• 绑定方法和非绑定方法


    一、绑定方法


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

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


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

    • 就是一个普通函数,想把它拿到类中管理,就是他的静态方法。
     
  • 相关阅读:
    网页元素居中的n种方法
    Swifter.Json 可能是 .Net 平台迄今为止性能最佳的 Json 序列化库【开源】
    .NET 欢乐编程术之类型超级转换之术👍👍
    C#.Net 使用 JsonReader/JsonWriter 高性能解析/生成 Json 文档
    UTF-16 -- 顶级程序员也会忽略的系统编码问题,JDK 错了十年!
    迄今为止 .Net 平台功能最强大,性能最佳的 JSON 序列化和反序列化库。
    并发系列(一)——线程池源码(ThreadPoolExecutor类)简析
    Flink源码阅读(一)——Per-job之Yarn的作业调度(一)
    阅读GitHub源码的正确打开方式
    安装Elasticsearch+Kibana【单节点、多ES实例】
  • 原文地址:https://www.cnblogs.com/lulingjie/p/11528952.html
Copyright © 2020-2023  润新知