Ich weiß, dass __new__
Methode aufgerufen wird, wenn versucht wird, eine Instanz einer Klasse zu erstellen, bevor __init__
aufgerufen wird.Ruft import Aufruf __new__ statische Methode?
Aber ich zufällig, dass zu finden, die ein Modul importieren withou Instanz erstellen wird auch anrufen __new__
Angenommen, ich habe dies:
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
und
b.py
import a
class C(B):
def a():
pass
Dann führe ich python b.py
aus, ich kann zwei ttt
Druck durch __new__
sehen. Also, wann ist die neue genau in diesem Fall genannt, schaffe ich nie eine Instanz der drei Klassen definiert i
Randbemerkung: '__new__' ist keine statische Methode. Es ist der Konstruktor, der sich implizit wie eine Klassenmethode verhält (er empfängt die Klasse als erstes Argument, keine Instanz der Klasse), aber er ist nicht statisch; Statisch würde bedeuten, dass es nur von der Klasse benannt wurde und nicht anderweitig damit verbunden ist. – ShadowRanger