我来自Java世界,是python的新手,也是Flask的新手。这是我的views.py
from app import app
class Employee:
def __init__(id,name): self.id = id; self.name = name;
@app.route('/')
@app.route('/index')
def index():
return Employee(12345,"MyName")
在函数index()中,当我试图在文件中没有类Employee的情况下返回“Hello World”并运行服务器时,Hello World字符串被写入网页。
然后我想到输出一个json,{"id":"12345","name":"MyName"}
所以我开始介绍一个类Employee,并创建了一个构造函数来传递id和name。
不幸的是,它开始显示此错误。
文件“C:\ python \ microblog \ app \ views.py”,第9行,索引返回 雇员(12345, “MYNAME”)
顺便说一句,在这里我假设如果我可以摆脱错误,那么烧瓶就可以将对象转换为json,将其作为对象的默认mimetype。
我看过这些answers,但对我的知识没有帮助。
答案 0 :(得分:3)
Python"方法"实际上是函数,并且没有指向当前实例的指针神奇地插入到函数的作用域中,因此您必须将第一个参数声明为对当前实例的引用(按照惯例,此参数名为self
) - 或者作为对当前类的引用,如果它是classmethod
(然后第一个参数是 - 按惯例 - 命名为cls
)。
当在实例上查找函数名时,它会变成一个(可调用的)method
对象,该对象保持对函数和当前实例的引用,并将实例作为第一个实例插入函数调用的参数,如下所述:https://wiki.python.org/moin/FromFunctionToMethod - 所以你在调用方法时没有(也绝不能)明确地传递当前实例。
注意:我知道这可能看起来很奇怪(甚至更糟)来自Java世界,但实际上有很多很好的理由来设计这种奇特的设计,因为当你&#39时你可能会自己找到它们。 ; ll开始探索Python的动态编程/元编程部分。
答案 1 :(得分:2)
在__init__
的第一个论点中,你必须通过自我:
class Employee:
def __init__(self, id,name):
self.id = id; self.name = name;
因为self
它的参考对象是员工。
每个Python对象都有两种特殊方法:__new__
和__init__
。创建对象的第一种方法,它没有引用对象(self),第二种方法是初始化创建的对象,所以它的引用名为self。