1

考虑一下这段 Python 代码:

>>> l = [1,2,3]
>>> l.foo = 'bar'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'foo'
>>> setattr(l, 'foo', 'bar')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'foo'

我明白为什么这不起作用——list没有__dict__,因此它不支持属性。

我想知道是否有推荐的替代列表集合类支持自定义属性,或者,如果有一个好的 Pythonic 'hack' 可用于将其添加到标准list类中。

或者这是一个更容易自己动手的情况?

4

2 回答 2

4
>>> class Foo(list): pass
>>> l = Foo([1,2,3])
>>> l.foo = 'bar'
>>> l
[1, 2, 3]
于 2013-04-28T16:40:52.283 回答
0

这是setattr您最初尝试使用的

>>> l = [1,2,3]
>>> lst = Foo(l)
>>> setattr(lst, 'foo', 'bar')
>>> lst.foo
'bar'
于 2013-04-28T19:05:39.910 回答