📜  类内的变量未检测到 python 中的全局变量(1)

📅  最后修改于: 2023-12-03 15:27:26.951000             🧑  作者: Mango

类内的变量未检测到 Python 中的全局变量

概述

类是面向对象编程的核心。在 Python 中,类和对象是由属性和方法组成的。属性和方法可以在类内和类外定义,但是当类内使用外部定义的变量时,有可能会出现变量未检测到的情况。

全局变量

Python 中,全局变量是指在模块级别定义的变量。这些变量可以在模块的任何地方被访问。全局变量可以在模块内的任何函数或类中使用。

global_var = 5

def func():
    print(global_var)

在上面的例子中,global_var 是一个全局变量,可以在 func 函数中使用。

类内变量

类内变量是指在类内部定义的变量。这些变量只能在类内使用,不能在类外直接访问。

class MyClass:
    class_var = 10

    def method(self):
        self.instance_var = 5

在上面的例子中,class_var 是一个类内变量,可以在类内的方法中使用。instance_var 是一个实例变量,可以在实例方法中使用。

类内变量未检测到全局变量

当类内部使用外部定义的变量时,有可能出现变量未检测到的情况。

global_var = 10

class MyClass:
    class_var = 20

    def method(self):
        print(global_var)
        print(class_var)

在上面的例子中,method 方法中的 global_var 可以被正确访问,但是 class_var 报错。这是因为 Python 在运行时检查变量名,当一个变量被使用时,Python 会先在本地作用域中查找该变量,如果找不到,就会向上级作用域查找。但是, Python 不会在全局作用域中查找类内变量。

为了解决这个问题,我们可以在访问类内变量时加上类名或者 self 关键字。

global_var = 10

class MyClass:
    class_var = 20

    def method(self):
        print(global_var)
        print(MyClass.class_var)
        print(self.class_var)

在上面的例子中,class_var 通过类名和 self 关键字正确访问。

结论

当类内部使用外部定义的变量时,需要注意变量的作用域。可以使用类名或者 self 关键字来访问类内变量。