Dict值为方法调用的Class实例

时间:2011-08-02 06:15:16

标签: python class function dictionary

将Abc类实例存储为dict值,并以数字作为键。然后我想使用dict键来查找实例并为该实例调用函数“here”。 (MS Win 7上的Python 3.2)代码:

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没有被执行任何实例。这可行吗?如果是这样,我需要什么代码?

3 个答案:

答案 0 :(得分:2)

你是红宝石的吗?在python括号中始终必须调用方法:

sees [i % 3].here

必须是

sees[i % 3].here()

答案 1 :(得分:1)

sess [i % 3].here

什么都不做。你想称之为:

sess[i % 3].here()

答案 2 :(得分:0)

请勿在{{1​​}}下方缩进here()的定义 - 它应与__init__处于同一级别。

您还需要实际调用该函数 - 在__init__之后添加()