如何解决如何将内容附加到类中的列表而不影响它的其他实例?
我尝试将内容附加到类中的列表中,问题是当我为我的一个实例执行此操作时,它对其他实例具有相同的效果。 这是我的代码的简化版本:
class Dir:
content = []
name = None
home = Dir()
home.name = "home"
home.content.append("Desktop")
sys = Dir()
sys.name = "home"
print(str(home.content))
print(str(sys.content))
当我执行脚本时,结果是:
['Desktop']
['Desktop']
解决方法
你应该在构造函数中声明你的实例变量:
class Dir:
def __init__(self):
self.content = []
self.name = None
,
当你有这样的课程时:
class Dir:
content = []
name = None
content
和 name
都是作为类属性开始的,它们可以立即作为 Dir.content
和 Dir.name
使用。
每次创建类的实例时:home = Dir()
,该实例获取相同引用的副本,因此 home.content == Dir.content
和 home.name == Dir.name
。
但是,当您执行:home.name = "home"
时,您会使用对 name
的引用覆盖实例变量的 "home"
属性。
现在仍然Dir.name == None
,但是home.name == "home"
。
现在是下一部分:home.content.append("Desktop")
您只引用 content
属性来调用 append()
方法。现在,类和实例 content
属性都包含 ['Desktop']
。
请务必阅读Ned Batchelder
的这篇优秀文章版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。