Python类中的变量作用域:实例变量、类变量和全局变量的区别

2023-03-22 00:00:00 变量 实例 类中

在Python中,类中的变量作用域可以分为实例变量、类变量和全局变量三种类型。

  • 实例变量:定义在类的方法中,使用self关键字声明的变量,是每个实例对象独立的变量,只能通过实例对象访问。实例变量的作用域仅限于实例对象内部。

  • 类变量:定义在类中,方法之外,使用类名声明的变量,是所有实例对象共享的变量,可以通过类名或实例对象访问。类变量的作用域是整个类的范围内。

  • 全局变量:定义在类外部,是在整个文件范围内都可见的变量。在类中可以通过全局变量名来访问全局变量,但是如果在类中声明同名的实例变量或类变量,实例变量或类变量会覆盖全局变量的值。

下面是一个简单的例子,展示了实例变量、类变量和全局变量的区别:

website = "pidancode.com"

class MyClass:
    class_var = "class variable"

    def __init__(self, instance_var):
        self.instance_var = instance_var

    def print_vars(self):
        print(f"Instance variable: {self.instance_var}")
        print(f"Class variable: {MyClass.class_var}")
        print(f"Global variable: {website}")

obj1 = MyClass("object 1")
obj2 = MyClass("object 2")

obj1.print_vars()
print("---")
obj2.print_vars()

MyClass.class_var = "updated class variable"

print("---")
obj1.print_vars()
print("---")
obj2.print_vars()

在上面的代码中,定义了一个类MyClass,它包含一个实例变量instance_var和一个类变量class_var。还定义了一个全局变量website。在print_vars方法中打印了这三种变量的值。

然后创建了两个MyClass的实例对象obj1和obj2,并调用了print_vars方法。可以看到,obj1和obj2的实例变量instance_var的值不同,而类变量class_var的值是相同的。全局变量website的值在两个实例对象中都是相同的。

接下来,修改了类变量class_var的值,并再次调用了print_vars方法。可以看到,所有实例对象的class_var的值都被修改了。

输出结果为:

Instance variable: object 1
Class variable: class variable
Global variable: pidancode.com
---
Instance variable: object 2
Class variable: class variable
Global variable: pidancode.com
---
Instance variable: object 1
Class variable: updated class variable
Global variable: pidancode.com
---
Instance variable: object 2
Class variable: updated class variable
Global variable: pidancode.com

需要注意的是,在类中定义的变量的作用域只限于该类内部,如果在类的方法中要使用全局变量

相关文章