スーパークラスの新しいインスタンス(a.k.a. "親"クラス)を作成するメソッドを持つクラスが必要です。そのクラスのインスタンスからクラスのインスタンスを作成するにはどうすればよいですか?
さらに、上記のクラスをサブクラス化し、このサブクラスでメソッドを継承し、そのメソッドを使用して独自のサブクラスのインスタンスをさらに作成できるようにします。
しかし、私はこのようにそれをやろう...
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() 'で呼び出すことができます(これはstaticメソッドの名前です)。 – martineau
「クリーンコピー」とは、元の「s」とは完全に別の意味です。 '[5] \ n [1]' –