我有两个从基类继承功能的对象。我希望能够独立地更改这些类,同时共享基类的功能。但是,我发现对一个对象的更改会影响另一个对象。我以前从来没有遇到过这个问题。这是怎么回事?
下面是一个如何设置的示例:
#!/bin/python3
class Base(object):
inputs = []
def __init__(self, inputs):
for i in inputs:
self.inputs.append(i)
class Thing1(Base):
def __init__(self, inputs):
super(Thing1, self).__init__(inputs)
class Thing2(Base):
def __init__(self, inputs):
super(Thing2, self).__init__(inputs)
t1 = Thing1(["Llama"])
print(t1.inputs)
t2 = Thing2(["Donkey", "Goat"])
print(t2.inputs)
print(t1.inputs)这将打印以下内容:
['Llama']
['Llama', 'Donkey', 'Goat']
['Llama', 'Donkey', 'Goat']我想把它打印出来:
['Llama']
['Donkey', 'Goat']
['Llama']我如何从我正在做的事情到我想要做的事情?为什么我的类没有独立更新?
编辑:已解决。感谢Mark Meyer的解决方案:
class Base(object):
def __init__(self, inputs):
self.inputs = []
for i in inputs:
self.inputs.append(i)发布于 2019-04-11 23:47:58
您需要通过在__init__()中定义来创建inputs和实例属性。否则,您将拥有一个在实例之间共享的类属性。
class Base(object):
def __init__(self, inputs):
self.inputs = []
for i in inputs:
self.inputs.append(i)发布于 2019-04-11 23:47:58
问题在于如何声明inputs列表。像这样在类中声明它(在函数外部)就是在类和所有扩展它的类上使它成为一个“静态”变量。
要解决此问题,请在__init__函数中设置self.inputs = []。
class Base(object):
def __init__(self, inputs):
self.inputs = []
for i in inputs:
self.inputs.append(i)发布于 2019-04-11 23:48:05
因为您已经将inputs定义为类级成员,而不是对象级成员。这些成员由类的所有实例共享。这就是它被修改的原因。
class X:
a = ...在这里,a是类级别的。这意味着它属于这个类。
class X:
def __init__(self):
self.a = ...这里的a是对象级的。它属于对象。
https://stackoverflow.com/questions/55636387
复制相似问题