我来自 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。
不幸的是,它开始显示此错误。
File "C:\python\microblog\app\views.py", line 9, in index return Employee(12345,"MyName")
顺便说一下,这里我假设如果我可以消除错误,flask 可以通过将对象作为对象的默认 mimetype 将对象转换为 json。
我看过这些 answers , 但对我的知识没有帮助。
最佳答案
Python“方法”是真正的函数,并且没有指向当前实例的指针神奇地插入到函数的范围内,所以你必须将你的第一个参数声明为对当前实例的引用(按照惯例,这个参数被命名为 self
) - 或者作为对当前类的引用,如果它是一个 classmethod
(那么第一个参数是 - 按照惯例 - 命名为 cls
)。
当在实例上查找函数名称时,它会变成一个(可调用的)方法
对象,该对象保留对函数和当前实例的引用,并将该实例作为第一个参数插入到函数调用,如此处解释:https://wiki.python.org/moin/FromFunctionToMethod - 因此在调用方法时您没有(也不能)显式传递当前实例。
注意:我知道这在 Java 世界中可能看起来很奇怪(甚至更糟),但实际上这种奇特的设计有很多很好的理由,当你开始探索时你可能会自己发现Python 的动态编程/元编程部分。
关于Python+ flask : __init__() takes 2 positional arguments but 3 were given,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29795546/