字典值作为类实例进行方法调用

0 投票
3 回答
1614 浏览
提问于 2025-04-16 22:42

我把Abc类的实例存储在一个字典里,字典的键是数字。我想用这个数字键来找到一个实例,然后调用这个实例的'here'函数。以下是我在Python 3.2(在Windows 7上)写的代码:

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

不要把here()的定义缩进到__init__下面,它应该和__init__在同一层级。

你还需要真正调用这个函数 - 在sees [i % 3].here后面加上()

1
sess [i % 3].here

这个东西没什么作用。你想要调用它:

sess[i % 3].here()
2

你是个 Ruby 程序员吗?在 Python 里,调用一个方法时,括号是必须的:

sees [i % 3].here

必须这样写

sees[i % 3].here()

撰写回答