生命系学生のゲノム解析覚え書き

大抵インフォ、時々バイオ、稀にアグリな日記

getattr使い方

もう完全にpythonのことしか書いてない・・・(笑)

getattrで苦戦したので書き残しておく。

問題のコードは下。recordはオブジェクト。

for u in dir (record):

     if u[0] != '__' :

           print(u,getattr(record,u))

これが意味わからんかった。record内の属性をdir及びforで一つずつ書き出し、__()__の形ではないものを(!=はノットイコールの意味)プリントする。プリントの際に問題となるのがgetattr。教科書的な説明では

object の指名された属性の値を返します。 name は文字列でなくてはなりません。文字列がオブジェクトの属性の一つの名前であった場合、戻り値はその属性の値になります。例えば、 getattr(x, 'foobar') は x.foobar と等価です。指名された属性が存在しない場合、 default が与えられていればそれが返され、そうでない場合には AttributeError が送出されます。 

というもの。いろんなサイトを調べてよくわからなかったが、結局公式サイトの説明が一番わかりやすかった。getattrは指定されたオブジェクト及び属性の値を返すようだ。問題となったサンプルコードでは、

① for構文で属性を一つ取り出す

②printとgetattrにより、取り出した属性の値を文字列で返す。このときにu,が入っているため、属性の値だけでなく属性も返して見やすくしているようである。

 

とまあ、こんな感じ。理解すると簡単だけど理解するまでが難しいっす