我希望有一个类有一个方法来创建它的超类的新实例(也称为“父”类)。你知道吗
另外,我想对上面描述的类进行子类化,并让这个子类继承方法,然后能够使用该方法创建自己子类的更多实例。你知道吗
但是,当我试着这样做的时候。。。你知道吗
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__()
不给我一个超类的干净副本?你知道吗
我做错什么了?如何创建要创建的类?你知道吗
这不是
makeNew
方法的问题,而是__init__
方法的问题。当您有一个可变的默认参数时,修改该值将修改您将来的所有默认值。你应该做的是:这样,每个新实例都会创建一个新的列表,而不仅仅是对同一个列表的更多引用。你知道吗
另一方面,看起来并不需要
value
作为列表。当然,这里没有显示的其他代码可能需要它,但是如果这是所有的代码,那么您只需要self.value = ...
。因为现在重新分配self.value
而不是修改它,所以可以很好地使用默认参数。你知道吗相关问题 更多 >
编程相关推荐