为什么我不能在 class 中初始化变量后立即使用它?

Why can't I use a variable immediately after it is initialised in a class?

为什么我不能在 class 中初始化变量后立即使用它?

1. class A:
2.     var1 = <call_to_a_function_outside_class_A>
3.     Var2 = <something_to_with_var1>
....

我明白了

NameError: name 'var1' is not defined (at line number 3)

我错过了什么?

显然你有这样的东西:(一个 lambda/function 里面有 var1

class A:
    var1 = 10
    var2 = lambda: print(var1)
    
A.var2()  # NameError: name 'var1' is not defined

原因在于 Python 的范围规则。 class 中的方法不是 嵌套 在 class 中,这意味着如果 Python 在方法中找不到变量,它不会检查 class 的命名空间以找到它。
相反 它将查看模块的名称空间(globals() 字典)以查看是否有 var1

class A:
    var1 = 10
    var2 = lambda: print(var1)

var1 = "something"
A.var2()  # "something"

如果您需要在方法中访问 class 变量,您可以 hard-code class 的名称 (print(A.var1)) 或使用 __class__:(我会在这里使用def关键字和常规方法,也从实例调用方法)

class A:
    var1 = 10
    def my_method(self):
        print(self.__class__.var1)
        print(A.var1)

var1 = "something"
obj = A()
obj.my_method()

输出:

10
10