Я знаю, что метод __new__
вызывается при попытке создать экземпляр класса до того, как будет вызван __init__
.Импортирует вызов __new__ static method?
Но я случайно обнаружить, что импортировать модуль 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__' не является статическим методом. Это конструктор, который неявно ведет себя как метод класса (он получает класс как первый аргумент, а не экземпляр класса), но он не является статичным; static подразумевает, что это просто имена, помеченные классом, а не связанные с ним иным образом. – ShadowRanger