辞書を構造体っぽくアクセス出来るならリストでも出来るんじゃね?と思って調べてみた。

@shimizukawaさんの過去のBlogに pythonで辞書に構造体っぽくアクセスするメモ at 清水川Web という記事があった。
内容としては題名通り辞書に対してのアクセス、

In [1]: dic = {"a":1, "b":2, "c":3}
In [2]: dic["a"]
Out[2]: 1

を、

In [3]: dic.a
Out[3]: 1

なんていう風に構造体っぽくアクセスするためには?ということが書かれている。
方法としては、組み込み型のdictを継承し、
__getattr__というスペシャルメソッドをオーバーライドしてアクセス方法を変えるというものだった。


この記事を見て僕が思ったのが、listについてもコレが出来るのでは?と思った。
じゃあ、やってみようぜ!


基本的なソースは、pythonで辞書に構造体っぽくアクセスするメモ at 清水川Web の記事と一緒。

In [1]: class ListMapper(list):
   ...:     def __getattr__(self, index):
   ...:         if index in self:
   ...:             return self[index]
   ...:     def __setattr__(self, index, value):
   ...:         self[index] = value
   ...:         
   ...:         

In [2]: lists = [1,2,3,4] 

In [3]: mylist = ListMapper(lists)

In [4]: mylist[1]
Out[4]: 2

In [5]: mylist.1
------------------------------------------------------------
   File "<ipython console>", line 1
     mylist.1
            ^
SyntaxError: invalid syntax

__getattr__メソッドが呼ばれる前に、シンタックスエラーになるというオチでした。。
なんか、方法があるのかもしれないけど><
でも、__getattr__って使い道によってなんか色々出来そう!もっと調べてみよ〜