[英]Flask instanciation app = 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)
这是我来自nettuts 的代码,这是我的代码:
from flask import Flask, render_template
app = Flask()
@app.route('/')
def home():
return render_template('home.html')
@app.route('/about')
def about():
return render_template('about.html')
if __name__ == '__main__':
app.run(debug=True)
我的问题是:这个至少需要 2 个参数的init方法在哪里?
如果您了解类和对象的概念,那么__init__
是初始化类实例的构造函数。 在这种情况下,类是 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
是必需的参数,rest 都是默认的或不需要的。 Python 需要self
,即使您可以将其命名为任何其他名称。 阅读 python 的创建者自己的博客,了解为什么http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html
__init__
类似于 python 中的构造函数——它是在创建对象的新实例时被调用的函数,在这种情况下是Flask
应用程序对象。
App 对象需要一个import_name
,这是您传递给Flask
构造函数的第一个参数。 您可以在此处阅读更多相关信息(请参阅“关于第一个参数”)
我的问题是:这个至少需要 2 个参数的 init 方法在哪里?
就在这里:
https://github.com/pallets/flask/blob/master/src/flask/app.py#L401
您需要为 Flask 应用程序命名:
app = Flask(__name__)
__name__
将是当前模块的名称,但原则上您可以随意称呼它...
直接回答您的问题: __init__
是调用Flask()
。 您最初的调用旨在启动Flask
类的实例,而__init__
是进行设置的函数。
不过,要解决您的直接问题:您只需要传递一个参数。 错误消息具有误导性。
这不是错误的,但它谈论的是一个不是你认为你调用的函数。 @codegeek 的示例向您展示了“第一个”参数是什么。 是self
。 但是当class.__init__
作为调用Flask()
的结果而被调用时,它是从 Class 内部传递的。 您没有看到self
被使用,除了隐式 - 当您认为传递零参数时,它是回溯中的(给定的)参数。
重要的是,这并不是这种情况独有的——您会在非常简单的示例中看到同样的事情,例如:
class Example:
def __init__(self, one):
self.one = one
ex = Example()
这将产生:
TypeError: __init__() takes exactly 2 arguments (1 given)
意思是, Example()
调用__init__
,它需要 'self' 和 'one',而它只得到了 'self'。
(不过,从这个问题来看,我强烈建议您阅读类似http://pythoncentral.io/introduction-to-python-classes/或另一个 Python 类介绍的内容。类是该语言的基本元素,初始化它们是其功能的基本部分。)
为了简单回答您的问题, __init__方法是此处 Flask() 类的默认构造函数。 它只是驻留在您刚刚从语句中导入的 Flask 类中
from flask import Flask
所以,你说的那一刻
app = Flask(__name__)
它所做的只是实例化这个 Flask 类的一个对象。 而且由于您没有传递__name__参数,因此它会引发错误。
你可以在这里找到__init__方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.