1

我正在尝试在模块中创建一个类,将该模块文件导入我的控制器中,然后引用该模块中定义的类,但我不断收到一条消息,内容为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 支持用户定义的类。

4

1 回答 1

2

如前所述,只需self.info = {}进入__init__().

__init__()本质上是一个你熟悉的java构造函数。它在调用时初始化该类的实例对象。我有一段时间没有使用 Java,但我认为您也不应该在构造函数之外声明类变量。

self是一个参数,python 类中的所有方法都必须将其作为第一个参数接收。因此,如果您尝试它们,您的 getter 和 setter 也将不起作用;他们必须是:

def setInfo(self, info)def getInfo(self)

创建对象时,如下所示:

device1 = device_info()

它调用__init()__,传递device1self. 然后,每当您使用该对象时,例如

device1.setInfo(newInfo),您可以将类上下文中的方法想象为setInfo(device1, newInfo)、since device1is或正在使用的对象self的当前实例。device_info

您也不需要object类定义中的参数。你期望它做什么?


编辑:实际上,不要self.info = {}进入__init__(),只是摆脱它。你已经self.info = info__init__(). 您不需要像在 Java 中那样在 Python 中初始化变量。创建一个空dict然后将其设置为另一个dict而不使用是多余的。

于 2016-07-19T18:45:36.730 回答