2011-08-02 8 views
0

Abcクラスのインスタンスをdict値としてキーとして番号を付けて保存しました。次に、dictキーを使用してインスタンスを見つけ、そのインスタンスの関数 'here'を呼び出したいとします。 (MS勝利7上のPython 3.2)コード:メソッド呼び出しのクラスインスタンスとしてのDict値

class Abc(): 

    def __init__ (self, num): 
     self.num = num 
     print ('Starting sess no - ', self.num) 

    def here (self): 
     print ('Here - ', self.num) 

def main(): 
    sess = dict ((i, Abc(i)) for i in range (3)) 
    for i in range (7): 
     print ('Go to Sess - key: ', i % 3, ' value: ', sess [i % 3]) 
     try: 
      sess [i % 3].here 
     except: 
      raise KeyError ('Problem with key') 

この出力を生成する:

Starting sess no - 0 

Starting sess no - 1 

Starting sess no - 2 

Go to Sess - key: 0 value: <__main__.Abc object at 0x00C193B0> 

Go to Sess - key: 1 value: <__main__.Abc object at 0x00C19510> 

Go to Sess - key: 2 value: <__main__.Abc object at 0x00C19530> 

Go to Sess - key: 0 value: <__main__.Abc object at 0x00C193B0> 

Go to Sess - key: 1 value: <__main__.Abc object at 0x00C19510> 

Go to Sess - key: 2 value: <__main__.Abc object at 0x00C19530> 

Go to Sess - key: 0 value: <__main__.Abc object at 0x00C193B0> 

Abc.hereは任意のインスタンスに対して実行されていません。これは実行可能ですか?もしそうなら、どんなコードが必要ですか?

答えて

1
sess [i % 3].here 

は何もしません。あなたはそれを呼びたい:

sess[i % 3].here() 
2

あなたはルイビストですか? Pythonの括弧は常にメソッドを呼び出すことが必須です。

sees [i % 3].here 

sees[i % 3].here() 
0

にする必要があり__init__の下here()の定義をインデントしないでください - それは__init__と同じレベルにする必要があります。

sees [i % 3].hereの後に実際に関数を呼び出す必要があります。()を追加してください。

+0

書式設定(?)によるインデント - 元のコードでは表示されませんでした。そしてここで()働いた。 – steve

+0

私はあなたのポストにそれを修正しました。 – Amber

関連する問題