绑定方法和非绑定方法

1.绑定方法

"""
绑定方法: 特殊之处在于将调用者本身当做第一个参数自动传入
"""

1.1绑定给对象的方法

绑定给对象的方法 : 调用者是对象,自动传入的是对象

class foo:
    def say(self):
        print('我说: 你好啊')

obj = foo()
obj.say()        # 其中say是绑定给对象的方法 , 虽然它写在类中

1.2绑定给类的方法

绑定给类的方法 : 调用者类 , 自动传入的是类

import settings


class Mysql:
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port

    def func(self):
        print(f"{self.ip}:{self.port}")

    @classmethod   # 将下面的函数装饰成绑定给类的方法
    def from_conf(cls):
        print(cls)  # 当前类
        return cls(settings.ip, settings.PORT)
"""
很多时候类方法都是提供一种从配置文件中实例化对象的这个方法
类方法应用场景 : 一种新的造对象 , 初始化的方法 (可能来自配置文件或其他)
"""

那么什么时候这个方法应该是绑定给对象的 , 还是绑定给类的呢 ? 怎么判断呢?

这个就需要看你的函数体代码的具体功能 , 如果函数体代码用到对象 , 那就是绑定给对象 , 函数体代码用到类那就绑定给类

2.非绑定方法

在绑定方法中要么绑定给对象 , 要么绑定给类 , 然后函数体代码中有对象或者类 , 那么有没有一种函数体代码中 , 既不用到对象 , 也不用到类呢??? 这种函数就是非绑定方法也叫静态方法

class Mysql:
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port

    @staticmethod   # 将下面方法装饰成一个非绑定方法
    def create_id():
        import uuid
        return uuid.uuid1()

既然没有绑定 谁来调用呢 ? 因为没有绑定 , 所以对象和类都可以调用 , 但是没有自动传参的效果

obj = Mysql('127.0.0.1', 8080)
print(obj.create_id())
print(Mysql.create_id())

应用场景 : 当函数体代码中不需要类 , 也不需要对象 , 并且你还想把这个方法集成在类内部 , 就使用非绑定方法

posted @ 2021-12-22 22:11  Mn猿  阅读(32)  评论(0编辑  收藏  举报