自定制元类

版权声明:17602128911 https://blog.csdn.net/bus_lupe/article/details/86422407

元类是MyTyep
元类的实例Foo类
Foo类的实例f1

元类实例化的时候执行元类的__init__,产生Foo类,元类中的self都是cls

元类的实例Foo实例化的时候执行Foo类的__init__,产生实例f1,元类实例中的self都是f1

class MyType(type):
    # self = <class '__main__.Foo'>
    # what = Foo
    # base = ()
    # dict = {'__module__': '__main__', '__qualname__': 'Foo', '__init__': <function Foo.__init__ at 0x0000021F250F8950>}
    # __init__在元类实例化创建Foo类时调用
    def __init__(self, what, base, dict):
        print('>>元类初始化')

    # 在MyType的实例Foo类实例化时被调用
    def __call__(self, *args, **kwargs):
        # 创建Foo类的实例 = obj
        obj = object.__new__(self)
        # Foo类实例化的时候执行Foo类的__init__方法
        self.__init__(obj, *args, **kwargs)
        # f1 = obj
        return obj
class Foo(metaclass=MyType):
    def __init__(self, name):
        self.name = name


f1 = Foo('lucy')

猜你喜欢

转载自blog.csdn.net/bus_lupe/article/details/86422407