[英]How to create an instance of a class from an instance of that class?
我想擁有一個類,該類的方法會創建其超類的新實例(又名“父”類)。
另外,我想對上述類進行子類化,並讓該子類繼承該方法,然后能夠使用該方法創建其自己的子類的更多實例。
但是,當我嘗試這樣做時...
class Superclass:
def makeNew(self):
return self.__class__() #this isn't making a clean copy
class Subclass(Superclass):
def __init__(self, value = [1]):
self.value = value
def setValue(self, newValue):
self.value[0] = newValue
if __name__ == "__main__":
s = Subclass()
s.setValue(5)
other = s.makeNew()
print(s.value)
print(other.value)
我懂了
>>> [5] #s.value
>>> [5] #other.value
為什么self.__class__()
給我超類的完整副本?
我究竟做錯了什么? 如何創建我想要的課程?
這與您的makeNew
方法makeNew
。 那是您的__init__
的問題。 當您具有可變的默認參數時,修改該值將修改您將來的所有默認值。 相反,您應該做的是:
def __init__(self, value=None):
if value is None:
value = [1]
# ...
這樣,每個新實例都將創建一個新列表,而不是對同一列表的更多引用。
順便提一句,看起來您不需要value
就可以成為列表。 當然,這里未顯示的其他代碼可能也需要它,但是如果這是全部代碼, self.value = ...
需要self.value = ...
由於您現在要重新分配self.value
而不是對其進行修改,因此可以使用默認參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.