2014-10-20 153 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