更新时间:2024-04-09 来源:黑马程序员 浏览量:
在Python中,类变量(class variables)和实例变量(instance variables)是面向对象编程中的两种不同类型的变量,它们在作用域、生命周期、访问方式等方面有所不同。
1.定义位置:
(1)在类的内部,但在任何方法之外定义。
(2)它们属于类,而不是任何特定的实例。
(3)通常在类的顶层定义,即在所有方法之外。
2.作用域:
(1)类变量在整个类中都是可见的,包括类的所有实例。
(2)所有的实例共享同一份类变量的副本。
3.生命周期:
(1)类变量的生命周期与类本身相同,即类被加载进内存时创建,当程序退出时销毁。
4.访问方式:
(1)可以通过类名或实例名访问类变量。
(2)在没有同名实例变量的情况下,可以通过类名直接访问类变量。
5.修改方式:
(1)可以通过类名直接修改类变量。
(2)修改类变量会影响所有实例。
1.定义位置:
(1)在类的任何方法中使用 self 关键字定义的变量都是实例变量。
(2)每个实例都有自己的一组实例变量。
2.作用域:
(1)实例变量的作用域限制在当前实例中,不同实例之间的实例变量互不影响。
3.生命周期:
(1)实例变量的生命周期与其所属的实例相同,即在实例被销毁时实例变量也会被销毁。
4.访问方式:
(1)实例变量只能通过实例名访问。
(2)可以在类的方法中通过 self 关键字访问实例变量。
5.修改方式:
(1)实例变量通常在 __init__() 方法中初始化,并通过实例方法或直接在实例上进行修改。
(2)实例变量的修改仅影响当前实例,不影响其他实例或类变量。
示例:
class MyClass: class_var = 0 # 类变量 def __init__(self, instance_var): self.instance_var = instance_var # 实例变量 # 创建实例 obj1 = MyClass(1) obj2 = MyClass(2) # 访问类变量 print(MyClass.class_var) # 输出:0 print(obj1.class_var) # 输出:0 print(obj2.class_var) # 输出:0 # 修改类变量 MyClass.class_var = 10 print(MyClass.class_var) # 输出:10 print(obj1.class_var) # 输出:10 print(obj2.class_var) # 输出:10 # 修改实例变量 obj1.instance_var = 100 print(obj1.instance_var) # 输出:100 print(obj2.instance_var) # 输出:2
总之,类变量适用于需要在类的所有实例之间共享数据的情况,而实例变量适用于每个实例都有自己独立数据的情况。