微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将内容附加到类中的列表而不影响它的其他实例?

如何解决如何将内容附加到类中的列表而不影响它的其他实例?

我尝试将内容附加到类中的列表中,问题是当我为我的一个实例执行此操作时,它对其他实例具有相同的效果。 这是我的代码的简化版本:

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

contentname 都是作为类属性开始的,它们可以立即作为 Dir.contentDir.name 使用。

每次创建类的实例时:home = Dir(),该实例获取相同引用的副本,因此 home.content == Dir.contenthome.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 举报,一经查实,本站将立刻删除。