我想要创建一个新的超类实例(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]' –