【发布时间】:2010-04-25 07:13:29
【问题描述】:
>>> class Abcd:
... a = ''
... menu = ['a', 'b', 'c']
...
>>> a = Abcd()
>>> b = Abcd()
>>> a.a = 'a'
>>> b.a = 'b'
>>> a.a
'a'
>>> b.a
'b'
都是正确的,每个对象都有自己的'a',但是...
>>> a.menu.pop()
'c'
>>> a.menu
['a', 'b']
>>> b.menu
['a', 'b']
怎么会这样? 以及如何使用列表作为类属性?
【问题讨论】:
-
您绝对不是第一个遇到这种情况的人。我记得第一次遇到这个问题:我花了好几天才弄清楚问题是什么。一旦你学会它就有意义,但我个人认为它真的很不直观。
-
@musicfreak:我真的不明白为什么人们会对此感到困惑。通过查看任何教程中的任何 OO 示例,您将了解这一点。为什么有人宁愿浪费“几天”而不是花几个小时来阅读教程,我无法理解。
-
-1:这个有很多重复项。
-
听起来你不想要一个类属性,而是一个实例属性。官方教程docs.python.org/tut 和tinyurl.com/thinkcspy2e 等书籍中介绍了如何做到这一点
-
我来自 php 和 java,对我来说这个概念(作为“和或”功能和私有/受保护策略)很奇怪
标签: python class attributes