슈퍼 클래스 (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'가 서브 클래스의 인스턴스라면 (staticmethod에 부여한 이름)'s.make_new_instance()'로 호출 할 수 있습니다. – martineau
"깨끗한 사본"이란 원래의's'와는 완전히 별개의 의미입니다. '[5] \ n [1]' –