Bei der Instanziierung einer Klasse, zuerst, __neu__() wird aufgerufen, um eine die Instanz einer Klasse entonces __init__() wird zur Initialisierung aufgerufen die Instanz .
Wird aufgerufen, um eine neue Instanz der Klasse cls zu erstellen. ...
Wenn __new__() während der Objektkonstruktion aufgerufen wird und ein Instanz von cls zurückgibt, dann wird die Methode __init__() der neuen Instanz aufgerufen wie __init__(self[, ...]), ...
Wird aufgerufen, nachdem die Instanz erstellt wurde (durch __new__()), ...
Weil __new__() und __init__() bei der Konstruktion von Objekten zusammenarbeiten (__new__(), um es zu erstellen, und __init__(), um es anzupassen), ...
Zum Beispiel, wenn die Instanziierung Teacher
Klasse , zuerst, __neu__() wird aufgerufen, um eine die Instanz von Teacher
Klasse entonces __init__() wird zur Initialisierung aufgerufen die Instanz wie unten dargestellt:
class Teacher:
def __init__(self, name):
self.name = name
class Student:
def __init__(self, name):
self.name = name
obj = Teacher("John") # Instantiation
print(obj.name)
Dies ist die Ausgabe:
<class '__main__.Teacher'>
John
Und mit __new__()
von die Instanz von Teacher
Klasse können wir erstellen die Instanz von Student
Klasse wie unten dargestellt:
# ...
obj = Teacher("John")
print(type(obj))
print(obj.name)
obj = obj.__new__(Student) # Creates the instance of "Student" class
print(type(obj))
Jetzt, die Instanz von Student
Klasse wird wie unten dargestellt erstellt:
<class '__main__.Teacher'>
<__main__.Teacher object at 0x7f4e3950bf10>
<class '__main__.Student'> # Here
Wenn wir nun versuchen, die den Wert von name
variabel von **der Instanz von Student
Klasse wie unten dargestellt:
obj = Teacher("John")
print(type(obj))
print(obj.name)
obj = obj.__new__(Student)
print(type(obj))
print(obj.name) # Tries to get the value of "name" variable
Der folgende Fehler tritt auf, weil die Instanz von Student
Klasse nicht initialisiert worden ist durch __init__()
noch nicht:
AttributeError: Das Objekt 'Student' hat kein Attribut 'name'.
Also, wir initialisieren die Instanz von Student
Klasse wie unten dargestellt:
obj = Teacher("John")
print(type(obj))
print(obj.name)
obj = obj.__new__(Student)
print(type(obj))
obj.__init__("Tom") # Initializes the instance of "Student" class
print(obj.name)
Dann können wir erhalten den Wert von name
variabel de die Instanz von Student
Klasse wie unten dargestellt:
<class '__main__.Teacher'>
John
<class '__main__.Student'>
Tom # Here
1 Stimmen
Versuchte, Design Patterns zu verstehen, und hörte zum ersten Mal von :flyweight Design Patterns.. und sehr guter Link mit Beispielen in fast allen gängigen Sprachen.
5 Stimmen
Ist es nicht ein Singleton?