我知道在調用__init__
之前嘗試創建類的實例時會調用__new__
方法。進口調用__new__靜態方法嗎?
但我偶然發現,導入模塊withou創建實例也會打電話給__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__'不是一個靜態方法。它是構造函數,它隱含地表現爲類方法(它接收類作爲其第一個參數,而不是類的實例),但它不是靜態的;靜態意味着它僅僅是由這個類命名空間,而不是與之相關聯。 – ShadowRanger