Python中的类和函数
在编写一些关于类和函数的代码时,我以一个函数和一个同名的类为例 代码执行为:Python中的类和函数,python,Python,在编写一些关于类和函数的代码时,我以一个函数和一个同名的类为例 代码执行为: $python test.py 为此,我尝试了两种方案: 我首先在一个文件test.py中编写了它们,得到的结果是调用函数而不是类 class ABC: def __init__(self): a=3 print a def ABC(): b=7 print b if __name__=='__main__': ABC() 输出: 7 2136
$python test.py
为此,我尝试了两种方案:
class ABC:
def __init__(self):
a=3
print a
def ABC():
b=7
print b
if __name__=='__main__':
ABC()
输出:
7
2136
7
7
\uuuu init\uuu
函数时,函数和类都被执行了,而当我编写\uu init\uu
函数时,只有函数被执行了
- 没有
功能\uuuu初始化\uuuuu
- hello.py:
class DEF: a=2136 print a
class DEF: def __init__(self): a=2136 print a
- test.py:
from hello import DEF def DEF(): b=7 print b if __name__=='__main__': DEF()
输出:
7
2136
7
7
\uuuu init\uuuu
函数
class DEF:
a=2136
print a
class DEF:
def __init__(self):
a=2136
print a
from hello import DEF
def DEF():
b=7
print b
if __name__=='main':
DEF()
7
2136
7
7
类的主体在定义类时执行。因此,当python加载文件时,以下内容始终打印
2136
:
class DEF:
a=2136
print a
Python必须创建一个名为DEF
的类定义,要做到这一点,它会像执行函数一样执行类的主体。然后,该函数中的本地名称构成类主体
无论您如何使用另一个函数替换名称,都会发生这种情况。它也只运行一次;如果在顶级代码不再执行之前导入了模块。在定义类时执行类的主体。因此,当python加载文件时,以下内容始终打印
2136
:
class DEF:
a=2136
print a
Python必须创建一个名为DEF
的类定义,要做到这一点,它会像执行函数一样执行类的主体。然后,该函数中的本地名称构成类主体
无论您如何使用另一个函数替换名称,都会发生这种情况。它也只运行一次;如果在顶级代码不再执行之前导入了模块。如果您的问题恰好是为什么执行
print a
,python是一种解析语言,这意味着执行类定义代码,因此在那里编写任何函数时都会调用<当您调用DEF()
时,不会调用code>print a,而是在解释器第一次解析脚本时调用。如果您的问题恰好是为什么执行print a
,python是一种解析语言,这意味着执行类定义代码,因此在那里编写任何函数时都会调用<当您调用DEF()
时,不会调用code>print a,而是在解释器第一次解析脚本时调用。因为我读了您的“问题”,但我不仅无法识别您的疑问,甚至看不到一个“?@Meoiswa问题是“为什么?”,如“为什么会发生这种情况?”,而不是“为什么问问题是什么?”(我猜:)啊,我明白了,我太傻了。是的,Martijn Pieters很优雅地回答了你的问题。因为我读了你的“问题”,但我不仅看不出你的怀疑,甚至连一个都看不见?“@Meoiswa问题是“为什么?”比如“为什么会发生这种事?”,而不是“你为什么问这个问题?”(我猜:))啊,我明白了,我太傻了。是的,Martijn Pieters优雅地回答了您的问题。您可以通过在类定义中添加return
调用来测试这一点。您的代码将停止执行,因为它在解析DEF
definition时执行return
。您可以通过在类定义中添加return
调用来测试这一点。您的代码将停止执行,因为它在解析DEF
deffinitionThank Martjin,这很有用..谢谢Martjin,这很有用。。