python類靜態變數

2021-10-06 23:53:10 字數 827 閱讀 7819

python的類靜態變數直接定義在類中即可,不需要修飾符,如:

class

test

: stc_attr =

1def

__init__

(self,attr1,attr2)

:  self.attr1 = attr1

self.attr2 = attr2

在類test中,stc_attr是屬於類test的靜態變數,attr1和attr2是屬於物件的變數。並且通過類名和物件例項訪問stc_attr都是合法的。

可以看到類test,物件obj1和物件obj2中stc_attr變數的記憶體位址是相同的

我們變更stc_attr的值(必須從類名訪問):

可以看到兩個物件中stc_attr變數的記憶體位址一起改變了,所以只要通過類名修改靜態變數的值就可以實現物件共享同一變數。

如果通過物件來修改靜態變數的值:

這裡通過obj1物件修改了stc_attr的值,可以看到obj1.stc_attr的記憶體位址和類以及obj2物件中的stc_attr變數記憶體位址不同了。這種情況下,通過類名修改stc_attr的值不會對obj1.stc_attr的值產生影響。

Python 例項變數 類變數 靜態變數 (十九)

例項變數 例項變數則是以為self.開頭,必須在例項化該類後使用 class test object def init self self.a hello world def test self 在內部test.a是不能訪問類變數的 print self.a a test a.test 類變數 物件...

類靜態變數 問題

類的靜態成員變數 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置...

靜態變數和非靜態變數

class string1 a和b編譯報錯,can not make a static referrence to no static filed s3,s4 分析 string s1 pingguo string s2 xiangjiao string s3 new string lizi str...