【发布时间】:2017-01-31 19:05:52
【问题描述】:
我知道在调用__init__ 之前尝试创建类的实例时会调用__new__ 方法。
但我碰巧发现,在没有创建实例的情况下导入模块也会调用__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 什么时候准确调用,在这种情况下,我从不创建我定义的三个类的任何实例
【问题讨论】:
-
旁注:
__new__不是静态方法。它是构造函数,它隐含地表现得像一个类方法(它接收类作为它的第一个参数,而不是类的实例),但它不是静态的; static 意味着它只是由类命名空间,而不是与它相关联。