【问题标题】:Setting a property on a list object in Python 2.7在 Python 2.7 中设置列​​表对象的属性
【发布时间】:2013-04-22 07:43:06
【问题描述】:

考虑一下这段 Python 代码:

>>> l = [1,2,3]
>>> l.foo = 'bar'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'foo'
>>> setattr(l, 'foo', 'bar')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'foo'

我明白为什么这不起作用 -- list 没有 __dict__ 因此它不支持属性。

我想知道是否有推荐的替代列表集合类支持自定义属性,或者是否有一个好的 Pythonic 'hack' 可用于将其添加到标准 list 类中。

或者在这种情况下,您自己推出更简单?

【问题讨论】:

    标签: python list properties python-2.7


    【解决方案1】:
    >>> class Foo(list): pass
    >>> l = Foo([1,2,3])
    >>> l.foo = 'bar'
    >>> l
    [1, 2, 3]
    

    【讨论】:

    • 是的,就是这样。将它包装在一个类中。脑衰……谢谢提醒……
    • @Eric foo 是什么,l.foo = 'bar' 中有小写字母
    • @antitrust:你的意思是小写?这只是属性的任意名称。与Foo 的相似之处纯属巧合
    • 好的,在这一行中,您声明为 l 定义 foo 属性并为其赋值 bar,对
    【解决方案2】:

    这是使用您最初尝试使用的setattr

    >>> l = [1,2,3]
    >>> lst = Foo(l)
    >>> setattr(lst, 'foo', 'bar')
    >>> lst.foo
    'bar'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2014-10-24
      • 2020-03-31
      • 1970-01-01
      相关资源
      最近更新 更多