【问题标题】:need a simple way to add meta information/class to a python list/tuple variable?需要一种简单的方法将元信息/类添加到 python 列表/元组变量?
【发布时间】:2011-07-11 13:35:00
【问题描述】:

全部,

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

>>> 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”或将该列表嵌入到字典中?

谢谢!

【问题讨论】:

    标签: python list meta setattr


    【解决方案1】:

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

    >>> class MyList(list):
    ...   pass
    ... 
    >>> m = MyList((1, 2, 3))
    >>> len(m)
    3
    >>> m.foo = 42
    >>> m.foo
    42
    

    【讨论】:

    • 像往常一样,你打败了我。 +1
    • 谢谢,有没有办法让 python 愚弄 m 是列表类型? >>> type(m) main.MyList'>
    【解决方案2】:
    1. 确实有setattr。正如消息中所说,它确实具有属性“foo”。
    2. 是的,子类化它,例如
    
    class mylist(list):
     pass
    
    l = mylist()
    l.foo = 'bar'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多