Я хотел бы иметь класс с методом, который создает новый экземпляр своего суперкласса (родительский класс 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.make_new_instance()' if 's' является экземпляром подкласса (и это имя, которое вы дали staticmethod). – martineau
«Чистая копия» Я имею в виду, что она полностью отделена от оригинала 's'. Он должен напечатать '[5] \ n [1]' –