字典值作为类实例进行方法调用
我把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()