2013-05-02 95 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