如何在 web2py 中使用户定义 类

How to make user defined classes in web2py

我试图在模块中创建一个 class,在我的控制器中导入该模块文件,然后引用在该模块中定义的 class,但我不断收到消息上面写着 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 支持用户定义的 classes。

如上所述,只需将 self.info = {} 移动到 __init__()

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

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

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

创建对象时,像这样:

device1 = device_info()

它调用 __init()__,将 device1 作为 self 传递。然后,每当您使用该对象时,例如

device1.setInfo(newInfo),您可以认为 class' 上下文中的方法被调用为 setInfo(device1, newInfo),因为 device1self,或者device_info 对象的当前实例正在使用中。

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


编辑:其实,不要把self.info = {}移到__init__()里,去掉就行了。 __init__() 中已有 self.info = info。您不需要像在 Java 中那样初始化 Python 中的变量。创建一个空的 dict 然后将其设置为另一个 dict 没有任何用处是多余的。