我是python的新手,只是在一个模块中创建了3个类,即全局范围,在函数内和if块中。在运行模块时,所有类的所有语句都在运行。我很惊讶为什么在没有创建任何对象的情况下执行所有类。
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:')
答案 0 :(得分:1)
来自Python doc:
类定义是可执行语句。
和...
然后在新的执行框架中执行类的套件(参见 命名和绑定),使用新创建的本地命名空间和 原始全局命名空间(通常,套件主要包含 函数定义。)当类的套件完成执行时,它的 执行帧被丢弃,但保存了本地命名空间。 [4] A. 然后使用基类的继承列表创建类对象 类和属性字典的已保存本地名称空间。 类名绑定到原始本地中的此类对象 命名空间。
答案 1 :(得分:1)
当您编写此表单的代码块时:
byte[]
Python始终运行class Name:
<statements>
,然后就在那里。主要区别在于,如果这些语句中的任何一个定义变量,则不在全局命名空间中设置变量;相反,他们是&#34; scoo up&#34;并保存在字典中,该字典与称为(在本例中)<statements>
的对象相关联。
例如,您知道这是如何工作的:
Name
你可以把它放在一个类定义中,它仍然可以做同样的事情:
a = 1
print(a) # prints 1
但是在类定义结束后,变量class Name1:
a = 2
print(a) # prints 2
被&#34; scooped up&#34;并且不再具有类定义中的值。
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
当你调用该函数时,它们会保存到以后。但是类不像这样的函数。
答案 2 :(得分:0)
很难说出你在问什么,但是定义一个类与创建一个对象是不一样的。您需要调用该类来创建一个实例(您正在寻找的对象)。
# The class (a type)
class Demo:
pass
# An instance of the class (an object)
Demo()