如何在 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)
,因为 device1
是 self
,或者device_info
对象的当前实例正在使用中。
您也不需要 class 定义中的 object
参数。你希望它做什么?
编辑:其实,不要把self.info = {}
移到__init__()
里,去掉就行了。 __init__()
中已有 self.info = info
。您不需要像在 Java 中那样初始化 Python 中的变量。创建一个空的 dict
然后将其设置为另一个 dict
没有任何用处是多余的。
我试图在模块中创建一个 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)
,因为 device1
是 self
,或者device_info
对象的当前实例正在使用中。
您也不需要 class 定义中的 object
参数。你希望它做什么?
编辑:其实,不要把self.info = {}
移到__init__()
里,去掉就行了。 __init__()
中已有 self.info = info
。您不需要像在 Java 中那样初始化 Python 中的变量。创建一个空的 dict
然后将其设置为另一个 dict
没有任何用处是多余的。