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

标签 python flask

我来自 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/

相关文章:

javascript - 在html中将滚动条位置设置到底部

python - templategs "not a valid tag library",无法加载模型

python - 在 Faker python 中使用名字和姓氏生成电子邮件地址

python - sleep() 是否阻止了 Django 中请求的处理?

python - Flask 应用程序未启动(类型错误 : code() takes at least 14 arguments (13 given))

python - 服务器重启后如何使Flask应用启动并运行?

python - 使用数据表和 flask 进行服务器端处理

python - Pandas如何从聚合中按类别定位?

python - hadoop 流 : how to give list of key values to reducer?

python - 单元测试 Flask 应用程序 - 在应用程序中模拟全局变量