2016-11-30 39 views
-2

我有两类:使用字典调用不同的功能值

  • 一个被称为Stock()averageopenaveragehighaveragelowStock()类的方法。
  • 而一个是AppGUI()Tkinter文件。

问题:我想要调用我StartPage类从Stock()类每个人平均方法

Class StartPage(): 
...... 
...... 

    # calculate check boxes button 
    self.button_calculate = tk.Button(self, 
    text="Calculate",command=self.average) 
    self.button_calculate.pack() 
    self.button_calculate.place(x=180, y=300) 

    self.Google = Stock()   
    button_dict = {`'Average Open': self.Google.averageopen, 
    'Average High': self.Google.averagehigh, 
    'Average Low': self.Google.averagelow`} 

如何调用从button_dict价值? 什么时候这样做,它返回PY_VAR0,但我只想调用该函数本身?

+3

你试过'button_dict ['Average Open'](arguments)'? –

回答

0

您可以通过访问字典值和任何参数传递就像你使用任何其他函数调用它:

button_dict['Average Open'](parameter, parameter, ...) 

如果它返回PY_VAR0,这无关你怎么称呼它。无论函数如何调用,函数都会返回相同的结果。

通常情况下,当你看到PY_VAR0,这意味着你正在使用或返回一个实例StringVar当你想使用的

下面的代码将打印“PY_VAR0”

foo = tk.StringVar(value="this is foo") 
print(foo) 

下面将打印“这是福”:

foo = tk.StringVar(value="this is foo") 
print(foo.get()) 

foo = 
-2

您可以使用eval()函数动态调用包含在功能词典。这里有一个简单的例子:

class Stock(object): 
    def averageopen(self): 
     return True 

s = Stock() 
the_dict = {} 
the_dict.update({'Average Open':s.averageopen}) 

#see that we're about to execute 
print 's.' + the_dict['Average Open'].__name__ + '()' 

#now execute it 
print eval('s.' + the_dict['Average Open'].__name__ + '()') 

运行这段代码将存储在字典功能参考返回值:真

您可以连接参数到字符串由“()”之间添加。必要时迭代。

+1

为什么使用'eval'?这完全没有必要。这有点像开车去杂货店,把你的车拆开,拿着箱子运到商店,然后在停车场重建汽车。 –

+0

在python中实现这个功能是对象(就像其他的一样) - 你不需要建立一个字符串然后求值,你可以获得函数对象并使用'obj()'调用它。实际上,通过定义'__call __()'魔术方法,您可以允许任何对象的行为像一个函数。 – Delioth