2011-04-13 79 views
2

下面的代碼將導致打印正在執行的語句範圍令人驚訝的行爲

class C1(object): 

    print 'I am some code executing in C1' 

    def method1(self): 
     print 'I am method1' 
    def method2(self): 
     print 'I am method2' 
     pass 

我很驚訝這個,我會想到如果類被實例化時,將只執行,任何人都可以解釋這背後的想法?

回答

8

我想你的意思是它打印'我是一些在C1中執行的代碼'?

它是在創建類對象時打印出來的,在這種情況下,當您加載它聲明的文件時會發生這種情況。這也是放置類變量的地方(它可以用作Python的靜態變量其他語言)。

如果您想要創建實例時執行的代碼,請將其放入__init__()。關於這個問題

官方Python文檔:http://docs.python.org/tutorial/classes.html#class-objects

+0

謝謝!我想我會避免把代碼放在那裏,直到我更熟悉Python中的OOP。 – 2011-04-13 11:35:53

2

在Python中,一個類定義爲一個可執行語句。

To quote the documentation

7.7。類定義

類定義定義了一類對象(參見標準類型層次結構):

classdef ::= "class" classname [inheritance] ":" suite 
inheritance ::= "(" [expression_list] ")" 
classname ::= identifier 

類 定義是一個可執行語句。 它首先評估繼承 列表(如果存在)。 繼承列表中的每個項目應計算爲 類對象或類型, 允許繼承子類。然後使用新創建的本地 名稱空間和原始全局 名稱空間,在新的執行 幀(請參見命名和 綁定一節)中執行該類的套件 。 (通常,套件 僅包含函數定義。) 當類的套件完成 執行時,其執行框被丟棄,但其局部命名空間爲 保存。 [4]然後使用 基類的繼承列表和保存的本地 名稱空間爲屬性 字典創建類對象 。這個類對象在原始的 局部命名空間中綁定到 。

程序員筆記:在類定義中定義的變量 是變量類 ;它們由所有 實例共享。要創建實例 變量,可以使用self.name = value在方法 中設置它們。通過記號「self.name」可以訪問類和 實例變量 ,並且當以這種方式訪問​​ 時,實例變量隱藏類 變量具有相同名稱。類變量 可用作默認值,例如 變量,但使用可變值 可能會導致意外的結果。 對於新風格的類,可以使用描述符 來創建具有不同實現細節的實例變量 。

類定義,如函數 的定義,可能會被一個或多個裝飾器表達式包裝。表達式的 評估規則與 表達式的相同。結果必須是類 對象,然後綁定到 類名。

相關問題