2013-05-02 96 views
0

雖然寫在類和函數的一些代碼,我花了類和函數在Python

代碼執行的一個功能的情況下,用相同名稱的類:

$python test.py 

要做到這一點我嘗試兩種情況:

  1. 我第一次寫他們在一個文件test.py了,得到了調用該函數而不是類

    class ABC: 
        def __init__(self): 
         a=3 
         print a 
    
    def ABC(): 
        b=7 
        print b 
    
    if __name__=='__main__': 
        ABC() 
    

    輸出:

    7 
    
  2. 我在一個文件test.py和類在另一個文件同名的和進口它。當寫的功能我沒有寫__init__功能,這兩個功能以及該類得到執行,而當我寫了__init__功能,只有功能得到了執行

    • 沒有__init__功能

      1. hello.py:

        class DEF: 
            a=2136 
            print a 
        
      2. test.py:

        from hello import DEF 
        
            def DEF(): 
             b=7 
             print b 
        
        if __name__=='__main__': 
            DEF() 
        

      輸出:

      2136              
      7 
      
    • __init__函數定義

      1. hello.py:

        class DEF: 
            def __init__(self): 
            a=2136 
            print a 
        
      2. test.py

        from hello import DEF 
        def DEF(): 
            b=7 
            print b 
        if __name__=='main': 
            DEF() 
        

      輸出:

      7 
      
+0

問題是? – Meoiswa 2013-05-02 14:16:40

+0

@Meoiswa「爲什麼?」 – Paul 2013-05-02 14:20:14

+0

因爲我讀了你的「問題」,但不僅我不能確定你的疑問,我甚至看不到一個「?」 – Meoiswa 2013-05-02 14:21:45

回答

6

類的主體在定義類時執行。因此,下面總是打印2136當Python加載文件:

class DEF: 
    a=2136 
    print a 

Python有創建一個名爲DEF類的定義,要做到這一點它執行類的身體就好像它是一個功能。該函數的本地名稱就構成了類的主體。

發生這種情況無論你用另一個函數替換名稱。它也只運行一次;如果在頂層代碼再次執行之前導入了模塊。

+0

感謝Martjin,那很有用。 – animesh 2013-05-02 14:34:18

0

如果你的問題碰巧是爲什麼print a被執行,python是一個解析語言,這意味着類定義代碼被執行,因此任何函數在寫入時都會被調用。當您撥打DEF()時,print a未被調用,但實際上在解釋器首先解析腳本時調用。

+0

你可以在類定義中加入一個'return'調用來測試。你的代碼將會停止執行,因爲它在解析DEF定義時會執行'return' – Meoiswa 2013-05-02 14:23:53