簡體   English   中英

如何從該類的實例創建一個類的實例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM