<分区>
有人告诉我在类范围内声明动态属性不是“Python 方式”,但我不明白为什么。
有人可以向我解释一下,或者向我指出一些文档来说明为什么这是一件坏事吗?老实说,我认为这是一个很好的做法,如果有的话,可以 self 记录代码。
示例:
class ClassA(object):
user_data = {}
def set_user(self):
self.user_data['username'] = 'fred'
我能看到不使用它的唯一原因是属性是静态的(因此可能会产生误导)。
在评论中,您说,“嗯,每个实例都有不同的可变用户数据。”不,不会。 ClassA 的每个实例都将共享相同的 user_data 字典:
>>> class ClassA(object):
... user_data = {}
... def set_user(self, name):
... self.user_data['name'] = name
...
>>> a1 = ClassA()
>>> a1.set_user('fred')
>>> a1.user_data
{'name': 'fred'}
>>>
>>> a2 = ClassA()
>>> a2.user_data
{'name': 'fred'}
>>> a2.set_user('barney')
>>> a2.user_data
{'name': 'barney'}
>>>
>>> a1.user_data
{'name': 'barney'}
>>>
>>> a1.user_data is a2.user_data
True
这与是否是 Pythonic 无关。只需编写按您希望的方式运行的代码即可。