1

次の 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__ため、属性をサポートしていません。

listカスタム プロパティをサポートする推奨される代替リスト コレクション クラスがあるかどうか、またはこれを標準クラスに追加するための適切な Pythonic 'ハック' があるかどうかを知りたいです。

それとも、これは自分でロールする方が簡単な場合ですか?

4

2 に答える 2

4
>>> class Foo(list): pass
>>> l = Foo([1,2,3])
>>> l.foo = 'bar'
>>> l
[1, 2, 3]
于 2013-04-28T16:40:52.283 に答える
0

これはsetattrあなたが最初に使おうとした使い方です

>>> l = [1,2,3]
>>> lst = Foo(l)
>>> setattr(lst, 'foo', 'bar')
>>> lst.foo
'bar'
于 2013-04-28T19:05:39.910 に答える