我有问题在Flask中执行一个类方法。
在models/User.py
文件中:
from mongoengine import *
class User(Document):
first_name = StringField()
last_name = StringField()
...
def __init__(self, arg1, arg2, ...):
self.first_name = arg1
self.last_name = arg2
...
@classmethod
def create(self, arg1, arg2, ...):
#do some things like salting and hashing passwords...
user = self(arg1, arg2, ...)
user.save()
return user
在主要的应用程序Python文件中:
from models import User
...
def func():
...
#Throws "AttributeError: type object 'User' has no attribute 'create'"
user = User.create(arg1, arg2, ...)
我能否在不实例化User对象的情况下调用User类上的create方法?我使用的是Python 2.7.2,也尝试了使用非装饰器语法:
create = classmethod(create)
,但没成功。提前谢谢!编辑:我发现了一个问题:models文件夹中没有包含__init__.py
文件,因此它不是一个模块,所以from models import User
实际上没有导入我想要的文件。之前并未出现错误,是因为我曾经在应用程序python脚本的同一目录下有一个models.py
模块,但删除后我从未删除相应的.pyc
文件。现在,我收到的错误是AttributeError: 'module' object has no attribute 'create'
,而不是之前的错误,但我确信现在已经导入了正确的文件。编辑2:问题解决了。我将导入代码更改为from models.User import User
,现在它可以调用方法了。
User(arg1, arg2, ...): #constructor
是什么?我认为这不是有效的Python语法。 - Joel Cornett