自定义的元类里,重写的__new__()函数为什么不执行

class metaclass(type):
    def __new__(cls, name, this_bases, d):
         print("----- in metaclass new ---)


if __name__ == '__main__':
    ppp = type.__new__(metaclass, 'temp_class', (), {})

上面这个简单的代码,主线程是创建metaclass元类的实例,也就是名为”temp_class”的类,为何不会去调用metaclass中定义的__new__()方法,我对__new__()方法的理解是创建实例时候会调用。
而如果我改为: metaclass(’temp_class’, (), {})调用,则会去调用metaclass的__new__()方法。不知道这两个调用有什么区别

讨论数量: 1
Jason990420

You defined the method __new__ for child class metaclass, not for the parent class type, so you should call it by

ppp = metaclass.__new__(metaclass, 'temp_class', (), {})

or

class metaclass(type):

    @classmethod
    def __new__(cls, name, this_bases, d):
         print("----- in metaclass new ---")


if __name__ == '__main__':
    ppp = metaclass.__new__('temp_class', (), {})
3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!