正如其他人指出的那樣,第二個print
陳述正在執行,因爲它是構成類聲明的一組語句中的一個 - 當它們所在的模塊是imported
時,所有這些語句都會執行,因爲聲明是part它的頂級代碼是嵌套在函數或方法中的。
第一個print
語句沒有執行,因爲它是方法定義的一部分,它的語句只有在被調用之後纔會執行 - 與類定義中的不同。通常,當使用班級名稱創建班級的實例時,會間接調用班級的__init__()
方法,對於像您的名爲d
的班級,該班級的名稱將爲d()
。
因此,雖然它與顯示的字符串文本中的內容相矛盾,但要使第二個print
語句僅在創建類的實例時執行(就像第一個類一樣),您還需要使其成爲部分相同的方法(或由它調用)。換句話說,在這樣做之後,當類所在的文件是import
ed時,它們都不會執行,但是在創建類的任何實例時都會執行。這就是我的意思是:
文件x.py
:
class d:
def __init__(self):
print 'print this will NOT be printed' # not true
print "this will be printed when object is created"
文件b.py
:
import x # no print statements execute
obj = d() # both print statements will be executed now
「如何跳過執行,直到創建一個新的對象」 - 爲什麼不把它放在另一個'__init__'中? – mgilson 2012-08-17 17:13:33
爲什麼不直接在'__init__'方法中放置第二個'print'?我認爲'__init__'可能是你要找的東西,因爲根據定義,代碼是在創建對象 – 2012-08-17 17:13:38
上運行的,因爲真實的類比示例中的真實類大得多,所以它很難重新修改它 – Hamoudaq 2012-08-17 17:18:35