4

全て、

簡単なメタ情報をリスト オブジェクトに含める必要があります。以下のコードを参照してください。

>>> 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. リストにはすでに「 setattr」関数が含まれている必要があるため、変数「a」に setattr() を使用できないのはなぜですか?

  2. ' setattr ' をオーバーロードしたり、そのリストを dict に埋め込んだりする代わりに、リスト/タプル変数にメタ情報を添付する簡単な方法はありますか?

ありがとう!

4

2 に答える 2

7

C で定義された基本型には、任意の属性を追加できません。これを変更するには、それらから Python 型を派生させる必要があります。

>>> class MyList(list):
...   pass
... 
>>> m = MyList((1, 2, 3))
>>> len(m)
3
>>> m.foo = 42
>>> m.foo
42
于 2011-03-09T02:08:23.283 に答える
1
  1. setattrあります。メッセージにあるように、属性「foo」がありません。
  2. はい、サブクラス化します。

class mylist(list):
 pass

l = mylist()
l.foo = 'bar'
于 2011-03-09T02:12:04.647 に答える