我知道在调用__new__
之前尝试创建类的实例时会调用__init__
方法。
但我碰巧发现,使用create instance导入模块也会调用__new__
假设我有这个:
a.py:
import abc
class A(abc.ABCMeta):
def __new__(cls, name, bases, namespace):
print("ttt:", cls, name, bases, namespace)
retval = abc.ABCMeta.__new__(cls, name, bases, namespace)
return retval
class B(object):
__metaclass__ = A
和
b.py
import a
class C(B):
def a():
pass
然后我执行python b.py
,我可以通过ttt
看到两个__new__
打印。
那么,什么时候 new 被完全调用,在这种情况下,我永远不会创建我定义的三个类的任何实例
答案 0 :(得分:2)
当您使用元类来定义类时,元类被称为""隐式(调用__new__
,因为这里的元类是实际的类),请参阅Invoking the metaclass。我不能说你为什么在这里看到三个打印(你只有两个类使用A
作为元类,直接或间接通过继承),但这解释了两个print
。