Python:类属性的继承(列表)

标签 python inheritance list deep-copy class-attributes

从父类(super class)继承类属性然后更改子类的值效果很好:

class Unit(object):
    value = 10

class Archer(Unit):
    pass

print Unit.value
print Archer.value

Archer.value = 5

print Unit.value
print Archer.value

导致输出:
10
10
10
5
这很好:Archer 继承了 Unit 的值,但是当我更改 Archer 的值时,Unit 的值保持不变。

现在,如果继承的值是一个列表,浅拷贝效应就会发生,父类(super class)的值也会受到影响:

class Unit(object):
    listvalue = [10]

class Archer(Unit):
    pass

print Unit.listvalue
print Archer.listvalue

Archer.listvalue[0] = 5

print Unit.listvalue
print Archer.listvalue

输出:
10
10
5
5

从父类(super class)继承列表时,有没有办法“深度复制”列表?

非常感谢
佐野

最佳答案

这不是浅拷贝或深拷贝的问题,而是引用和赋值的问题。

第一种情况 Unit.valueArcher.value 是引用相同值的两个变量。当您执行 Archer.value = 5 时,您正在为 Acher.value 分配一个新引用。

要解决您的问题,您需要为 Archer.list 分配一个新的列表值。

如果这些值仅由类方法访问,那么最简单的解决方案是在类初始化时进行赋值。

关于Python:类属性的继承(列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2488306/

相关文章:

python - 有人可以向我解释一些简单的 python 概念吗?

python - 根据文件名通过 FTP 上传多个文件

c++ - 使用模板模板参数专门化基类

c++ - 构造函数的删除是否继承?

python - 根据列表中的以下元素获取第一个元素的范围

python - 将 xlabel 包裹在 Seaborn Plot 中

python - 将一系列序列转换为字典,反之亦然

C#:如何从派生类的静态方法调用基类的静态方法?

python - 将两个列表相交并计算每个元素重叠的次数

Java 泛型困惑