我想要創建一個新的超類實例(a.k.a.「parent」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__()
給我父的全新副本?
我在做什麼錯?我如何創建我想要的課程?
你認爲什麼是「乾淨的副本」?你取而代之的是什麼?無論如何,這樣做的另一種方法是在子類中定義一個'@ staticmethod',它將創建並返回新的實例。如果's'是子類的一個實例(這就是你給靜態方法的名字),你可以用's.make_new_instance()'調用它。 – martineau
「乾淨的拷貝」我的意思是它與原來的's'完全分開。它應該打印'[5] \ n [1]' –