4

全部,

我希望将简单的元信息包含在列表对象中,请参见下面的代码。

>>> a = []
>>> a.foo = 100
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
AttributeError: 'list' object has no attribute 'foo'
>>> setattr(a,"foo",100)
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
AttributeError: 'list' object has no attribute 'foo'
>>> dir(a)
...
 '__setattr__',
 '__setitem__',
...

我的问题是

  1. 为什么我不能将 setattr() 用于变量“a”,因为列表应该已经有 ' setattr ' 函数?

  2. 有没有一种简单的方法将元信息附加到列表/元组变量而不是重载“ setattr ”或将该列表嵌入到字典中?

谢谢!

4

2 回答 2

7

C 中定义的基类型不能添加任意属性;你必须从它们派生一个 Python 类型才能改变它。

>>> class MyList(list):
...   pass
... 
>>> m = MyList((1, 2, 3))
>>> len(m)
3
>>> m.foo = 42
>>> m.foo
42
于 2011-03-09T02:08:23.283 回答
1
  1. 确实有 setattr。如消息所述,它没有属性“foo”。
  2. 是的,将其子类化,例如

class mylist(list):
 pass

l = mylist()
l.foo = 'bar'
于 2011-03-09T02:12:04.647 回答