0

在写一些关于类和函数的代码时,我以函数和类同名的情况为例

代码执行为:

$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. 你好.py:

        class DEF:
            a=2136
            print a
        
      2. 测试.py:

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

      输出:

      2136                                                       
      7
      
    • 定义了__init__函数

      1. 你好.py:

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

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

      输出:

      7
      
4

2 回答 2

6

定义类时执行类的主体。因此,当 python 加载文件时,总是会打印以下内容:2136

class DEF:
    a=2136
    print a

Python 必须创建一个名为 的类定义DEF,并为此执行类的主体,就好像它是一个函数一样。然后来自该函数的本地名称形成类体。

无论您是否将名称替换为另一个函数,都会发生这种情况。它也只运行一次;如果在不再执行顶级代码之前已导入模块。

于 2013-05-02T14:16:11.493 回答
0

如果您的问题恰好是为什么print a执行,python 是一种解析语言,这意味着执行类定义代码,因此在编写时会调用任何函数。print a不是在您调用时被调用,DEF()而是在解释器第一次解析脚本时被调用。

于 2013-05-02T14:23:02.237 回答