Python是一種非常流行的編程語言,它的優(yōu)勢之一就是面向?qū)ο缶幊蹋∣OP)的支持。在OOP中,變量可以分為實(shí)例變量和類變量。其中,類變量是指所有該類對象所共享的變量。
Python中的類變量共享機(jī)制非常簡單且易于理解。類變量實(shí)際上是定義在類定義中而不是在__init__()方法中的變量。這些變量在類創(chuàng)建時(shí)就會(huì)被創(chuàng)建,并被所有該類對象所共享。
class MyClass: class_variable = 0 def __init__(self): self.instance_variable = 0 def inc_instance(self): self.instance_variable += 1 def inc_class(self): MyClass.class_variable += 1 obj1 = MyClass() obj2 = MyClass() obj1.inc_instance() obj1.inc_class() print(obj1.instance_variable) #打印結(jié)果為1 print(obj2.instance_variable) #打印結(jié)果為0 print(MyClass.class_variable) #打印結(jié)果為1 obj2.inc_instance() obj2.inc_class() print(obj1.instance_variable) #打印結(jié)果為1 print(obj2.instance_variable) #打印結(jié)果為1 print(MyClass.class_variable) #打印結(jié)果為2
在上面的代碼中,我們創(chuàng)建了一個(gè)名為MyClass的類。這個(gè)類有一個(gè)實(shí)例變量instance_variable和一個(gè)類變量class_variable。我們創(chuàng)建了兩個(gè)MyClass的對象obj1和obj2。我們先通過obj1調(diào)用了inc_instance()方法,它會(huì)將obj1的instance_variable值加1,此時(shí)obj1的instance_variable值為1,而obj2的值為0。我們再通過obj1調(diào)用了inc_class()方法,它會(huì)將class_variable的值加1,此時(shí)MyClass的class_variable值為1。我們再通過obj2調(diào)用了inc_instance()方法,它會(huì)將obj2的instance_variable值加1,此時(shí)obj1和obj2的instance_variable值都為1。我們最后通過obj2調(diào)用了inc_class()方法,它會(huì)再將class_variable的值加1,此時(shí)MyClass的class_variable值為2。
可以看到,這個(gè)示例中的類變量class_variable可以被所有的MyClass對象所共享。對象之間的實(shí)例變量instance_variable則是獨(dú)立的,一個(gè)對象的實(shí)例變量的值的修改不會(huì)影響其他對象的實(shí)例變量的值。