需要简单的方法为Python列表/元组变量添加元信息/类吗?
大家好,
我想在一个列表对象中简单地添加一些元信息,下面是代码。
>>> 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__',
...
我的问题是:
为什么我不能对变量 "a" 使用 setattr(),因为这个列表应该已经有 setattr 函数了吧?
有没有简单的方法可以把元信息附加到列表或元组变量上,而不是重载 setattr 或者把这个列表放到一个字典里?
谢谢!
2 个回答
1
- 它确实有一个叫做setattr的功能。但是,它没有名为'foo'的属性,就像消息里说的那样。
- 是的,可以通过继承来实现,比如:
class mylist(list):
pass
l = mylist()
l.foo = 'bar'
7
C语言中定义的基本类型不能随意添加属性;你必须从这些基本类型派生出一个Python类型,才能进行更改。
>>> class MyList(list):
... pass
...
>>> m = MyList((1, 2, 3))
>>> len(m)
3
>>> m.foo = 42
>>> m.foo
42