在不创建对象的情况下执行python类的所有语句
我是python新手,刚刚在一个模块中创建了3个类,即全局范围、函数内部和if块。在运行模块时,所有类的所有语句都在运行。我很惊讶为什么所有的类都是在没有创建任何对象的情况下执行的在不创建对象的情况下执行python类的所有语句,python,Python,我是python新手,刚刚在一个模块中创建了3个类,即全局范围、函数内部和if块。在运行模块时,所有类的所有语句都在运行。我很惊讶为什么所有的类都是在没有创建任何对象的情况下执行的 class Demo: print('global class Demo') def test(): print('Demo') class Demo: x = 'Demo from fuction test()' print(x) test() if T
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:')
从:
类定义是一个可执行语句
而且
然后在新的执行框架中执行该类的套件(请参见
命名和绑定),使用新创建的本地命名空间和
原始全局命名空间。(通常,该套件包含
函数定义。)当类的套件完成执行时
执行帧被丢弃,但其本地名称空间被保存。[4] A
然后使用基类的继承列表创建类对象
类和为属性字典保存的本地命名空间。
类名在原始本地文件中绑定到此类对象
命名空间
从:
类定义是一个可执行语句
而且
然后在新的执行框架中执行该类的套件(请参见
命名和绑定),使用新创建的本地命名空间和
原始全局命名空间。(通常,该套件包含
函数定义。)当类的套件完成执行时
执行帧被丢弃,但其本地名称空间被保存。[4] A
然后使用基类的继承列表创建类对象
类和为属性字典保存的本地命名空间。
类名在原始本地文件中绑定到此类对象
命名空间
很难说你在问什么,但是定义一个类和创建一个对象是不同的。您需要调用该类来创建一个实例(您正在寻找的对象)
很难说你在问什么,但是定义一个类和创建一个对象是不同的。您需要调用该类来创建一个实例(您正在寻找的对象)
当您编写此表单的代码块时:
class Name:
<statements>
您可以将其粘贴到类定义中,但它仍然执行相同的操作:
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
它们会保存到以后调用函数时。但是类在这方面与函数不同。当您编写这种形式的代码块时:
class Name:
<statements>
您可以将其粘贴到类定义中,但它仍然执行相同的操作:
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
它们会保存到以后调用函数时。但是类在这方面与函数不同。您只需三次声明类,而无需创建任何对象。你想在这里做什么?你想实现什么?试图理解如何声明和运行类。正如我所知道的,您可以在不同的范围内声明一个类。只需声明三次类,而不创建任何对象。你想在这里做什么?你想实现什么?试图理解如何声明和运行类。正如我所知道的,您可以在不同的范围内声明一个类。这(类定义是一个可执行语句)有助于理解这个概念。谢谢这(类定义是一个可执行语句)有助于理解这个概念。谢谢你是对的,我混淆了函数定义。谢谢Devid.@DJ-如果我的帖子回答了你的问题,我鼓励你通过接受它来表示-点击帖子左侧的绿色复选标记。你是对的,我混淆了函数定义。谢谢Devid.@DJ-如果我的帖子回答了你的问题,我鼓励你通过接受它来表示,点击帖子左侧的绿色复选标记。