为什么类名称空间在Python中是特殊的

2024-06-26 14:08:54 发布

您现在位置:Python中文网/ 问答频道 /正文

var_a = 0

class Chunk:
    var_a = 1

    def __init__(self):
        print("Global a = {}".format(var_a))
        print("Local a = {}".format(self.var_a))

mychunk = Chunk()

其结果是:

Global a = 0                                                                                                                                     
Local a = 1 

另一个例子

class BadIdea:
    var_b = 0
    def bad_idea(self):
        var_b = 1;
        nonlocal var_b
        print("var_b = {}".format(var_b))

whoops = BadIdea()

给予

main.py:25: SyntaxWarning: name 'var_b' is assigned to before nonlocal declaration                                                               
  nonlocal var_b                                                                                                                                 
  File "main.py", line 25                                                                                                                        
    nonlocal var_b                                                                                                                               
SyntaxError: no binding for nonlocal 'var_b' found 

正如@chepner在后一个例子中指出的,非局部作用域不包含var_b,因为类作用域不存在?你知道吗

我仍然很好奇为什么“类作用域”与函数作用域有所不同。你知道吗


Tags: pyselfformatmainvarlocaldef作用域