2011-07-15 3 views
1

の名前の属性を取得:このコードは動作するはず連結の私の理解に応じて自己

aList = ["first", "second", "last"] 
for i in aList: 
    print self.i 

私のクラスは、バインディングself.first=somethingだけでなく、self.secondself.lastを定義します。 print self.firstと書くとコードは機能しますが、print self.iでは例外が発生します。私は間違って何をしていますか?あなたのコードで

+0

実際のフィールドに文字列から変換したい場合に述べたように、それはやや曖昧であったように私は質問を編集しました。問題の内容が間違っていたら編集してください。 – msw

+0

あなたは本当に何をしようとしていますか?例えば、より良い解決策があります。辞書を使って – delnan

答えて

9

、 "i" が文字列である、あなたがそれを実行する必要があります。

aList = ["first", "second", "last"] 
for i in aList: 
    print getattr(self, i, None) 

http://docs.python.org/library/functions.html#getattr

GETATTR(オブジェクト、名[、デフォルト])
戻り値objectの指定された属性のnameは文字列でなければなりません。文字列がオブジェクトの属性の1つの名前である場合、 結果はその属性の値です。たとえば、getattr(x、 'foobar')はx.foobarと同等です。指定された属性に が存在しない場合は、デフォルトが返されます。そうでない場合、AttributeErrorは になります。

+0

私が探していたものです。 – Steve

1

あなたはfirstを混乱させる - あなたのクラスのメンバ - "first"と - あなたのメンバーに類似したコンテンツを保持するために起こる文字列変数を。

使用getattrあなたは

関連する問題