2011-06-26 7 views
18

内のリストのようなインデックス・アクセスを実装私はすなわち、配列に似た構文を使用してPythonオブジェクトのいくつかの値にアクセスできるようにしたいと思います:は、Python

obj = MyClass() 
zeroth = obj[0] 
first = obj[1] 

が可能、このですか?もしそうなら、どうすればこの問題をPythonクラスに実装できますか?

+2

明らかに、これらのグーグルの場合、これは「インデックス登録」と呼ばれています。 – PeterJCLaw

+0

リストがPythonでそうでない限り(私はほとんど使用しません)、リストの代わりにタイトルにインデックスを付けるべきでしょうか? –

+1

@Merlyn、リストは確かにそのようなものです。とにかく追加されました。 – PeterJCLaw

答えて

30

__getitem____setitem__、および__delitem__を書いたり書き換えたりする必要があります。

したがって、たとえば:

class MetaContainer(): 
    def __delitem__(self, key): 
     self.__delattr__(key) 
    def __getitem__(self, key): 
     return self.__getattribute__(key) 
    def __setitem__(self, key, value): 
     self.__setattr__(key, value) 

これは、その属性へのインデックス付きアクセスを可能にする非常に単純なクラスです。

2

__getitem____setitem__の方法を使用してください。

class MyClass: 
    def __getitem__(self, key): 
     return some_value_related_to_key 

    def __setitem__(self, key, value): 
     # set value (if needed)