Ich habe ein kleines Problem, das ich nicht verstehe.Python - Warum erstellt es keine neue Instanz von Objekt?
Ich habe eine Methode:
def appendMethod(self, newInstance = someObject()):
self.someList.append(newInstace)
ich ohne Attribute diese Methode aufrufen:
object.appendMethod()
Und ich anhängen tatsächlich die Liste mit der gleichen Instanz von Someobject.
Aber wenn ich es ändern:
def appendMethod(self):
newInstace = someObject()
self.someList.append(newInstance)
ich neue Instanz dieses Objekt jedes Mal, was ist der Unterschied?
Hier ist ein Beispiel:
class someClass():
myVal = 0
class otherClass1():
someList = []
def appendList(self):
new = someClass()
self.someList.append(new)
class otherClass2():
someList = []
def appendList(self, new = someClass()):
self.someList.append(new)
newObject = otherClass1()
newObject.appendList()
newObject.appendList()
print newObject.someList[0] is newObject.someList[1]
>>>False
anotherObject = otherClass2()
anotherObject.appendList()
anotherObject.appendList()
print anotherObject.someList[0] is anotherObject.someList[1]
>>>True
diese Frage nicht ist * * strikt auf den wandelbaren Standardwert bezogen, sondern ist über * wenn * Standardwerte erstellt werden. @tomek Beachten Sie, dass jede Funktion ein ** 'Tupel' ** ihrer Standardwerte im Attribut '__defaults__' behält. Aber was bedeutet das? Nun, da 'Tupel' unveränderliche Funktionen sind * können * nicht jedes Mal einen Standardwert erzeugen, wenn sie aufgerufen werden, daher wird der Standardwert nur * einmal * bei Funktion * Definition * erzeugt. Versuchen Sie 'someObject' mit einer Funktion wie' def func(): print ("called") 'zu ändern und sehen Sie, wann diese Funktion aufgerufen wird. – Bakuriu
Das ist eine gute Frage. Es hat mich bestimmt verwirrt, als ich aus C++ kam - Land, wo Funktionen Objekte der zweiten Klasse sind, die bei der Ausführung von Funktionen und nicht bei der Definition von Funktionen ausgewertet werden. – Shashank