簡單分析python的類變數 例項變數

2022-09-27 08:33:11 字數 2306 閱讀 6811

1、類變數、例項變數概念

類變數:

類變數就是定義在類中,但是在函式體之外的變數。通常不使用self.變數名賦值的變數。類變數通常不作為類的例項變數的,類變數對於所有例項化的物件中是公用的。

例項變數:

例項變數是定義在方法中的變數,使用self繫結到例項上的變數,只是對當前例項起作用。

2、訪問

類變數在類的內部和外部類變數都可以直接使用classname.類變數的形式訪問。但是在類的內部,也可以使用self.類變數來訪問,但是這個是用含義就不同了(後面使用**驗證)。

例項變數

在類的內部,例項變數self.例項變數的形式訪問;在類的外部使用物件名。例項變數的形式訪問。例項變數是繫結到乙個例項上的變數,它只是屬於這個繫結的實力。而區別類變數的就是類變數是所有的來自用乙個類的例項所共享。我們看到這裡會有這樣的疑問!

如果說類變數對所有來自這個類的所有例項所共享,那麼假如我乙個例項去改變了這個類變數(假設使用這樣的操作ob類變數 = value)的值,那麼對於其他的例項是不是都是可見的?

答案是否定的,下面驗證。

class a(object):

# 定義乙個類變數,初值是10

class_var = 10

print id(class_var)

def foo(self):

print '在類中訪問類變數:a.class_var=', a.class_var

print 'www.cppcns.com在類中訪問例項變數: self.class_var=', self, self.class_var

# 改變例項變數的值

self.class_var = 40

print '修改後訪問類變數:a.class_var=', a.class_var

print '修改後訪問例項變數 self.class_var=',self, self.class_var

# 這裡的class_var和函式外面的class_var不是同乙個東西,這是乙個區域性變數

class_var = 20

print id(class_var)

print 'class_var=', class_var

a.class_var = 15

print 'a.class_var=', a.class_var

print 'class_var=',class_var

prin程式設計客棧t 'self.class_var=',self.class_var

obj1 = a()

obj2 = a()

obj3 = a()

obj1.foo()

print a.class_var

print obj1.class_var

print obj2.class_var

print obj3.class_var

output:

49964144

在類中訪問類變數:a.class_var= 10

在類程式設計客棧中訪問例項變數: self.class_var= <__main__.a object at> 10

修改後訪問類變數:a.class_var= 10

修改後訪問例項變數 self.class_var= <__main__.a object at> 40

49963904

class_var= 20

a.class_var= 15

class_var= 20

self.class_var= 40

1540

1515

從上面執行的結果分析:當使用self.class_var形式訪問類變數的之後,如果修改self.class_var的值,可以發現,類變數的值沒有變化;不放心我們在修改類變數的值,發現self.class_var的值也沒有受到影響。

從最後列印obj2和obj3這兩個都來自於乙個類的例項中的類變數都是和修改後的類變數一樣,表示他們是共享類變數的。

3、總結

1、類變數可以使用classname.類變數和self.類變數兩種方式訪問。

2、如果使用self.類變數的方式訪問並重新賦值後,這個變數就會成為例項變數和self繫結,實際上就變成了乙個例項變數,例項變數會遮蔽掉類變數的值。

3、類變數是共享的程式設計客棧,最好使用類名的方式來訪問類變數。

4、類變數通過sel訪問時,就會被轉化成實力變數,被繫結到特定的例項上。

5、例項變數(self)的形式對類變數重新賦值後,類變數的值不會隨之變化。

6、例項變數對每乙個物件是不可見的,每乙個物件擁有著可能不同的值。

本文標題: 簡單分析python的類變數、例項變數

本文位址:

python中的類,類變數,例項變數

這幾天寫 的時候碰到乙個python中的小問題,找了好半天才解決,所以記錄下來。classa object def init self self.x y def call self for i in range 5 print x self.x print y y 輸出的結果是 x 5,5,5,5,...

python的類變數和成員變數

先看看下面 python view plain copy class testclass object val1 100 def init self self val2 200def fcn self val 400 val3 300 self val4 val self val5 500if na...

python 變數的簡單介紹

程式是如何執行的?程式是一種相對於計算電路的一種公升維或者說抽象,不需要在具體的運算中重新組合各種基本的電路,而是通過以電訊號表示的命令來控制電腦來執行,通過更改命令的執行順序來改變計算機的具體功能。這就是馮諾依曼儲存程式式體系 控制器,運算器,儲存器,輸入裝置,輸出裝置。具體的工作流程是 1 在控...