我正在尝试在模块中创建一个类,在我的控制器中导入该模块文件,然后引用该模块中定义的类,但我不断收到一条消息,内容为NameError("name 'self' is not defined")
这是我创建的模块中的代码:
from gluon import *
class device_info(object):
self.info = {}
def __init__(self, info):
self.info = info
return
def setInfo(info):
self.info = info
return
def getInfo():
return self.info`
有谁知道是什么原因造成的,以及如何解决?我的印象是web2py支持用户定义的类。
答案 0 :(得分:2)
如前所述,只需将self.info = {}
移至__init__()
即可。
__init__()
本质上是java熟悉的构造函数。它在调用时初始化该类的实例对象。我有一段时间没有使用过Java,但我认为你不应该在构造函数之外声明类变量。
self
是一个参数,python中的一个类中的所有方法都必须接收它们作为它们的第一个参数。所以如果你尝试它们,你的吸气剂和制定者也不会起作用;他们必须是:
def setInfo(self, info)
和def getInfo(self)
创建对象时,如下所示:
device1 = device_info()
它调用__init()__
,将device1
作为self
传递。然后,每当您使用该对象时,例如
device1.setInfo(newInfo)
,您可以将类'上下文中的方法视为setInfo(device1, newInfo)
,因为device1
是self
,或device_info
的当前实例1}}正在使用的对象。
您也不需要在类定义中使用object
参数。你期望这样做什么?
修改:实际上,请勿将self.info = {}
移至__init__()
,只需将其删除即可。您已在self.info = info
中拥有__init__()
。您不需要像在Java中那样初始化Python中的变量。创建一个空的dict
,然后将其设置为另一个dict
而不使用是多余的。