1
我有一個類似於下面的代碼:__init__功能似乎是在定義執行,沒有實例
class thingy(object):
def __init__(creds=get_credentials()):
# does stuff
pass
def get_credentials():
# produces different values sometimes. Ie: retrieves values from a db
return db.get(some_query)
dc.connect(credentials_and_stuff)
這失敗進口,不運行時,定義__init__()
,說「數據庫沒有連接」 。這對我沒有意義,因爲__init__()
函數還沒有運行!
看看本教程的初始章節([Default Argument Values](https://docs.python.org/3/tutorial/controlflow.html#default-argument-values)):「默認值是在_defining_範圍內的函數定義處評估的「。這看起來像很基礎的知識。 – Matthias 2014-09-05 20:21:23
你可以說它是基本的知識,但我不覺得這是足夠明顯的扔掉,不應該再次聲明。在遇到生產環境中引發的問題之前,我一直認爲可選參數是一種語法糖,它是作爲函數體的一部分執行的,語法或文檔中沒有任何內容(外部教程像你提到的那樣,但並非所有的教程都涵蓋了這個,我個人從來沒有使用過),在別處導致我認爲我錯了。 – Conslo 2014-09-05 22:04:46