gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:49:38 25 4
gpt4 key购买 nike

我试图在模块中创建一个类,在我的 Controller 中导入该模块文件,然后引用该模块中定义的类,但我不断收到一条消息,内容为 NameError("name ' self'未定义”)

这是我创建的模块中的代码:

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 支持用户定义的类。

最佳答案

如上所述,只需将 self.info = {} 移至 __init__() 即可。

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

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

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

当你创建一个对象时,如下所示:

device1 = device_info()

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

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

您也不需要在类定义中使用 object 参数。您希望它能做什么?

<小时/>

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

关于python - 如何在web2py中创建用户定义的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com