Mam mały problem, którego nie rozumiem.Python - dlaczego nie tworzy nowej instancji obiektu?
Mam metodę:
def appendMethod(self, newInstance = someObject()):
self.someList.append(newInstace)
nazywam tę metodę bez atrybutów:
object.appendMethod()
A właściwie, dołączyć listę z tej samej instancji someObject.
Ale jeśli zmienię go:
def appendMethod(self):
newInstace = someObject()
self.someList.append(newInstance)
dostaję nową instancję tego obiektu za każdym razem, co za różnica?
Oto przykład:
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
kwestia ta nie jest ściśle * * związane z zmienny wartość domyślną, ale jest o * kiedy * Wartości domyślne są tworzone. @tomek pamiętać, że każda funkcja zachowuje ** 'tuple' ** swoich domyślnych wartości w atrybucie' __defaults__'. Ale co to znaczy? Cóż, z pewnością, ponieważ 'tuple's są niezmiennymi funkcjami * nie może * tworzyć wartości domyślnej za każdym razem, gdy są wywoływane, stąd domyślna wartość jest tworzona tylko * raz * w funkcji * definicja *. Spróbuj zmienić 'someObject' za pomocą funkcji' def func(): print ("called") 'i zobacz kiedy ta funkcja zostanie wywołana. – Bakuriu
To jest dobre pytanie. To z pewnością mnie zdezorientowało, kiedy pochodziłem z C++ - ziemi, gdzie funkcje są obiektami drugiej klasy ocenianymi przy wykonywaniu funkcji, a nie definicji funkcji. – Shashank