1. 程式人生 > 其它 >python 類變數和例項變數

python 類變數和例項變數

類變數是在類空間中命名的,就是不加self的變數。

因此,程式不能直接訪問這些變數,必須通過類名+類變數來訪問, 不管是在全域性範圍內還是函式內訪問這些類變數,都必須使用類名進行訪問

class Address:
    detail = "guangzhou"
    post_code = "510660"
    def info(self):
        #嘗試直接訪問類變數
        #print(detail) #報錯

        #通過類類訪問類變數
        print(Address.detail)
        print(Address.post_code)

#通過類來訪問Address 類的類變數 print(Address.detail) addr = Address() addr.info() #修改Address類的類變數 Address.detail = "fushan" Address.post_code = "460110" addr.info()
guangzhou
guangzhou
510660
fushan
460110
請按任意鍵繼續. . .

實際上, python完全允許使用例項(物件)來訪問物件所屬類的類變數(當然還是推薦使用類訪問類變數)

class Record:

    #define two class variable
item = "滑鼠" date = "2016" def info(self): print("In info method : ", self.item) print("In info method: ",self.date) rc = Record() #也可以通過例項來訪問類變數 print(rc.item) print(rc.date) rc.info()
滑鼠
2016
In info method :  滑鼠
In info method:  2016
請按任意鍵繼續. . .

實際上,程式通過物件訪問類變數,其本質還是通過類名在訪問類變數

由於通過物件訪問類變數的本質還是類名在訪問,因此如果類變數發生了改變,當程式訪問這些類變數時也會讀到修改之後的值

class Record:

    #define two class variable
    item = "滑鼠"
    date = "2016"
    def info(self):
        print("In info method : ", self.item)
        print("In info method: ",self.date)

rc = Record()
#也可以通過例項來訪問類變數
print(rc.item)
print(rc.date)
#由於通過物件訪問類變數的本質還是類名在訪問,因此如果類變數發生了改變,當程式訪問這些類變數時也會讀到修改之後的值
Record.item = "鍵盤"
Record.date = "2021"
rc.info()
滑鼠
2016
In info method :  鍵盤
In info method:  2021
請按任意鍵繼續. . .
class Record:

    #define two class variable
    item = "滑鼠"
    date = "2016"
    def info(self,item,date):
        self.item = item
        self.date = date
rc = Record()
print(rc.item)
print(rc.date)
rc.info("display","2021")#修改的還是例項(self)的變數item,date,
print(rc.item)
print(rc.date)
print("-"*30)
print(Record.item)#item,date不會被改變
print(Record.date)        
滑鼠
2016
display
2021
------------------------------
滑鼠
2016
請按任意鍵繼續. . .