Flask instanciation app = Flask()

时间:2013-07-16 14:10:02

标签: python flask init

我故意删除app = Flask(名称)中的名称,我收到此错误:

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)

我的问题是:这个 init 方法在哪里至少需要2个参数?

6 个答案:

答案 0 :(得分:10)

如果您理解类和对象的概念,那么__init__是初始化类实例的构造函数。在这种情况下,该类是Flask,当您执行以下操作时,您正在初始化Flask对象的实例:

app = Flask(__name__) 

现在你的问题是,“这个init方法在哪里至少需要2个参数?”

可以按照下面定义解释代码中的构造函数。

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):

如果您看到上述内容,则selfimport name是必需参数,其余均为默认值或不需要。 Python需要self,即使您可以将其命名为其他任何内容。阅读此博客由python本人的创建者为http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html

答案 1 :(得分:7)

__init__类似于python中的构造函数 - 它是在创建对象的新实例时调用的函数,在本例中是Flask应用程序对象。

App对象需要import_name,这是您传递给Flask构造函数的第一个参数。您可以阅读有关here的更多信息(请参阅“关于第一个参数”)

答案 2 :(得分:2)

  

我的问题是:这个init方法在哪里需要至少2个   参数

就在这里:

https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L315

答案 3 :(得分:1)

您需要为Flask应用程序命名:

app = Flask(__name__)

__name__将是当前模块的名称,但您原则上可以将其称为任何内容......

答案 4 :(得分:1)

要直接回答您的问题:调用__init__会调用Flask()。您的原始调用旨在启动Flask的实例,__init__是执行设置的函数。

尽管如此解决您的问题:您只需要传递一个参数。错误消息具有误导性。

@codegeek的例子显示了&#34;第一个&#34;论证是。它是self。但是,当class.__init__被称为调用Flask()结果时,会从类内部传递出来。您没有看到self被使用,除了隐含地 - 它是您的追溯中的(给定的)参数,当您您正在传递零参数。

重要的是,这种情况并非独一无二 - 您可以在非常简单的示例中看到相同的内容,例如:

class Example:
    def __init__(self, one):
        self.one = one
ex = Example()

这将产生:

TypeError: __init__() takes exactly 2 arguments (1 given)

意思是Example()来电__init__,这需要“自我”和“自我”。并且“只有一个人”,而且只有“自我”。

(但问题是,我强烈建议您阅读类似http://pythoncentral.io/introduction-to-python-classes/的内容或python类的其他介绍。类是语言的基本元素,初始化它们是其功能的基本部分。)

答案 5 :(得分:0)

要简单回答您的问题, __ init __ 方法是此处Flask()类的默认构造函数。它只是驻留在您刚刚从语句

导入的Flask类中
from flask import Flask

所以,你说的那一刻

app = Flask(__name__)

它所做的只是实例化这个Flask类的一个对象。由于您没有传递 __ name __ 参数,因此会抛出错误。

你可以找到 __ init __ 方法here