All,
I want simple meta information to be enclosed on an list object, see below code.
>>> 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__',
...
my quesions are
why I can not use setattr() for variable "a" as the list should have 'setattr' function alr开发者_如何学JAVAeady?
is there a simple way to attach meta info to list/tuple variable instead of overload 'setattr' or embedded that list into a dict?
thanks!
The base types defined in C cannot have arbitrary attributes added; you must derive a Python type from them in order to change this.
>>> class MyList(list):
... pass
...
>>> m = MyList((1, 2, 3))
>>> len(m)
3
>>> m.foo = 42
>>> m.foo
42
- it does have setattr. it does not have attribute 'foo', as the message says.
- yes, subclass it, e.g.
class mylist(list):
pass
l = mylist()
l.foo = 'bar'
精彩评论