Python正课78 —— 绑定方法 与 非绑定方法

本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12672581.html

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

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

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

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


obj = Mysql('127.0.0.1', 3306)
obj.func()      # 127.0.0.1 3306

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

新的方法:

setting.py

IP = '127.0.0.1'
PORT = 3306
import settings


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

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

    @classmethod    # 绑定给类的方法
    def form_conf(cls):
        print(cls)
        return cls(settings.IP, settings.PORT)

    @staticmethod  # 将下述函数 装饰成一个静态方法
    def create_id():
        import uuid
        return uuid.uuid4()

    @classmethod
    def f1(cls):
        pass

    def f2(self):
        pass

obj2 = Mysql.form_conf()    # <class '__main__.Mysql'>
print(obj2.__dict__)        # {'nid': UUID('fb7015fb-8e6c-4c1e-9a24-241a7c3aff10'), 'ip': '127.0.0.1', 'port': 3306}

二:非绑定方法

没有绑定给任何人:调用者可以是类、对象,没有自动传参的效果

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

    @staticmethod  # 将下述函数 装饰成一个静态方法
    def create_id():
        import uuid
        return uuid.uuid4()


obj1 = Mysql('1.1.1.1', 2208)

# print(Mysql.create_id)  # <function Mysql.create_id at 0x037083D0>
# print(obj1.create_id)   # <function Mysql.create_id at 0x037083D0>

Mysql.create_id()
obj1.create_id()

猜你喜欢

转载自www.cnblogs.com/xuexianqi/p/12672581.html