Skip to main content
 首页 » 编程设计

Python+ flask : __init__() takes 2 positional arguments but 3 were given

2025年05月04日59zhwl

我来自 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 的动态编程/元编程部分。