2014-10-20 180 views
1

我一直在玩腳本幾個星期,並沒有任何問題,但我現在正在嘗試創建一個類,並遇到問題。NameError初始化類實例

我自己並沒有完全理解它,但當我嘗試創建下列類的實例時,出現此錯誤NameError: global name 'instance_status_check' is not defined

我完全意識到這個班目前並沒有做太多的工作,但直到我解決了這個問題後,我才能繼續前進。有人能解釋我做錯了什麼嗎?

import sys 
import boto 
import boto.ec2 

class Monitor: 

    def __init__(self,conn,identifier): 
     self.connection = conn 
     self.identifier = identifier 
     self.dispatcher ={'1': instance_status_check} 

    def user_menu(): 
     for i, value in self.dispatcher.itertems(): 
      print "Please press {i} for {value}".format(i,value) 

    def instance_status_check(): 
     pass  
+0

的課程教程你將什麼作爲一個值分配給'dispatcher'字典? – squiguy 2014-10-20 19:56:35

+0

我打算用它來建立一個用戶菜單 - 即調用調度程序['1']()來調用instance_status_check函數 – user2983542 2014-10-20 19:58:55

回答

2

你缺少從兩種方法的self參數,它是iteritems不 :

class Monitor: # upper case for class names 
    def __init__(self,conn,identifier): 
     self.connection = conn 
     self.identifier = identifier 
     self.dispatcher ={'1': self.instance_status_check} # call self.instance_status_check() 

    def user_menu(self): # self here 
     for i, value in self.dispatcher.iteritems(): 
      print("Please press {i} for {value}".format(i,value)) 

    def instance_status_check(self): # self here 
     return "In status method" 

m = Monitor(3,4) 
print(m.dispatcher["1"]()) 
In status method 

我建議你看看docs

+0

這是行得通的,但並不是我希望對字典值做的事情,我希望建立一個用戶菜單並調用例如調度程序['1']()來調用我編輯的instance_status_check函數 – user2983542 2014-10-20 20:13:57

+0

以刪除parens,如果你想在類的實例中分享字典,你應該看看類方法 – 2014-10-20 20:14:48

+0

謝謝你的作品,你能解釋爲什麼我需要自我。在函數調用之前?謝謝 – user2983542 2014-10-20 20:22:34

0

您有此錯誤,因爲您已經在使用它之後定義了instance_status_check

移動聲明的類以上:

def instance_status_check(): 
    pass 

class monitor: 

    def __init__(self,conn,identifier): 
     self.connection = conn 
     self.identifier = identifier 
     self.dispatcher ={'1': instance_status_check} 

    def user_menu(self): 
     for i, value in self.dispatcher.itertems(): 
      print "Please press {i} for {value}".format(i,value) 

此外,這將不打印Please press 1 for instance_status_check將打印像Please press 1 for <function instance_status_check at 0xsomething>

+0

因此,在正常情況下,我在做什麼不會是一個問題?例如,字典條目有不同的值?謝謝 – user2983542 2014-10-20 20:01:28