需要简单的方法为Python列表/元组变量添加元信息/类吗?

4 投票
2 回答
1261 浏览
提问于 2025-04-16 13:18

大家好,

我想在一个列表对象中简单地添加一些元信息,下面是代码。

>>> 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. 为什么我不能对变量 "a" 使用 setattr(),因为这个列表应该已经有 setattr 函数了吧?

  2. 有没有简单的方法可以把元信息附加到列表或元组变量上,而不是重载 setattr 或者把这个列表放到一个字典里?

谢谢!

2 个回答

1
  1. 它确实有一个叫做setattr的功能。但是,它没有名为'foo'的属性,就像消息里说的那样。
  2. 是的,可以通过继承来实现,比如:

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

撰写回答