2016-11-30 42 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