如何在web2py中创建用户定义的类

时间:2016-07-19 18:27:33

标签: python python-2.7 web2py web2py-modules

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

1 个答案:

答案 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),因为device1self,或device_info的当前实例1}}正在使用的对象。

您也不需要在类定义中使用object参数。你期望这样做什么?

修改:实际上,请勿将self.info = {}移至__init__(),只需将其删除即可。您已在self.info = info中拥有__init__()。您不需要像在Java中那样初始化Python中的变量。创建一个空的dict,然后将其设置为另一个dict而不使用是多余的。