Python 烧瓶实例应用=烧瓶()
我故意删除了app=Flask(name)中的name,我得到了以下错误:Python 烧瓶实例应用=烧瓶(),python,flask,init,Python,Flask,Init,我故意删除了app=Flask(name)中的name,我得到了以下错误: Traceback (most recent call last): File "routes.py", line 4, in <module> app = Flask() TypeError: __init__() takes at least 2 arguments (1 given) 我的问题是:至少接受2个参数的init方法在哪里?您需要为Flask应用程序命名: app
Traceback (most recent call last):
File "routes.py", line 4, in <module>
app = Flask()
TypeError: __init__() takes at least 2 arguments (1 given)
我的问题是:至少接受2个参数的init方法在哪里?您需要为Flask应用程序命名:
app = Flask(__name__)
\uuuuu name\uuuuuu
将是当前模块的名称,但原则上您可以随意调用它…\uuuuu init\uuuuu
类似于python中的构造函数-它是在创建对象的新实例时调用的函数,在本例中是Flask
应用程序对象
应用程序对象需要一个import\u名称
,这是传递给Flask
构造函数的第一个参数。您可以阅读更多相关内容(请参阅“关于第一个参数”)
我的问题是:至少需要2个参数的init方法在哪里
争论
就在这里:
如果您理解类和对象的概念,那么
\uuuu init\uuuu
是初始化类实例的构造函数。在本例中,类为Flask,执行以下操作时,您正在初始化Flask对象的实例:
app = Flask(__name__)
现在你的问题是,“这个至少接受2个参数的init方法在哪里?”
这可以按照下面的定义来解释,该定义在代码中定义了构造函数
def __init__(self, import_name, static_path=None, static_url_path=None,
static_folder='static', template_folder='templates',
instance_path=None, instance_relative_config=False):
如果您在上面看到,
self
和import name
是必需的参数,其余参数都是默认值或非必需的。Python需要self
,尽管您可以为它命名任何其他名称。请阅读python创建者自己的博客,了解为什么要直接回答您的问题:\uuu init\uuu
是调用Flask()
的结果。您最初的调用旨在启动类的实例Flask
,而\uuuuu init\uuuu
是执行设置的函数
但要解决眼前的问题:您只需要通过一个参数。错误消息具有误导性。
这并不是不正确的,但它所讨论的函数不是您认为调用的函数@codegeek的示例向您展示了“第一”参数是什么。它是self
。但是,当调用Class时,这是从类内部传递的。你看不到有人在使用self
,除非是隐式的——它是你回溯中的(1个给定)参数,当你认为你传递的是零个参数时
重要的是,这并不是本例所独有的——您将在非常简单的示例中看到同样的情况,如:
class Example:
def __init__(self, one):
self.one = one
ex = Example()
这将产生:
TypeError: __init__() takes exactly 2 arguments (1 given)
意思是,Example()
(从问题中,我强烈建议您阅读类似以下内容或python类的其他介绍。类是语言的基本元素,初始化它们是其功能的基本部分。)简单地回答您的问题,\uuu init\uu方法是Flask()的默认构造函数在这里上课。它只是驻留在您刚刚从语句导入的Flask类中
from flask import Flask
所以,当你说
app = Flask(__name__)
它所做的只是实例化这个Flask类的一个对象。由于您没有传递\uuuu name\uuuu参数,因此它会抛出错误
您可以找到\uuuu init\uuuu方法如果您想查看Flask的实际代码,可以访问/venv/lib/python.27/site-packages/Flask如果您使用了virtualenv,那么您应该在这里安装pip的所有内容;)
app = Flask(__name__)