如何从类的实例创建类的实例?

2024-05-19 00:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望有一个类有一个方法来创建它的超类的新实例(也称为“父”类)。你知道吗

另外,我想对上面描述的类进行子类化,并让这个子类继承方法,然后能够使用该方法创建自己子类的更多实例。你知道吗

但是,当我试着这样做的时候。。。你知道吗

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__()不给我一个超类的干净副本?你知道吗

我做错什么了?如何创建要创建的类?你知道吗


Tags: 实例方法selfreturnvaluedef子类class
1条回答
网友
1楼 · 发布于 2024-05-19 00:23:01

这不是makeNew方法的问题,而是__init__方法的问题。当您有一个可变的默认参数时,修改该值将修改您将来的所有默认值。你应该做的是:

def __init__(self, value=None):
    if value is None:
        value = [1]
    # ...

这样,每个新实例都会创建一个新的列表,而不仅仅是对同一个列表的更多引用。你知道吗

另一方面,看起来并不需要value作为列表。当然,这里没有显示的其他代码可能需要它,但是如果这是所有的代码,那么您只需要self.value = ...。因为现在重新分配self.value而不是修改它,所以可以很好地使用默认参数。你知道吗

相关问题 更多 >

    热门问题