gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:22:35 28 4
gpt4 key购买 nike

从父类(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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com