我是 python 新手,刚刚在模块中创建了 3 个类,即全局范围、函数和 if block 内。运行模块时,所有类的所有语句都在运行。我很惊讶为什么所有类都在没有创建任何对象的情况下执行。
class Demo:
print('global class Demo')
def test():
print('Demo')
class Demo:
x = 'Demo from fuction test()'
print(x)
test()
if True:
class Demo:
print('Demo from if:')
最佳答案
当您编写这种形式的代码块时:
class Name:
<statements>
Python 始终运行 <statements>
,就在那时和那里。主要区别在于,如果这些语句中的任何一个定义了变量,则这些变量不会在全局命名空间中设置;相反,它们被“舀起”并保存在字典中,该字典与一个名为(在本例中)Name
的对象关联。 .
例如,您知道这是如何工作的:
a = 1
print(a) # prints 1
你可以把它放在类定义中,它仍然做同样的事情:
class Name1:
a = 2
print(a) # prints 2
但是类定义结束后,变量a
被“舀起”并且不再具有其在类定义中的值。
a = 1
print(a) # prints 1
class Name2:
a = 3
print(a) # prints 3
print(a) # prints 1
print(Name2) # prints <class '__main__.Name2'>
print(Name2.a) # prints 3; this shows where the `a` from the class definition went
您可能会将其与函数定义混淆。当您使用 def
启动函数定义 block 时关键字,此时 block 内的语句不执行。
def func():
a = 4
print(a)
# this prints nothing unless you call func()
它们会一直保存到稍后您调用该函数时。但类在这方面与函数不同。
关于python - python类的所有语句在没有对象创建的情况下执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45951535/