[英]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.