1.類變量
下面介紹類變量的兩種定義方式、兩種讀取方式、在類裏面的調用方式
定義
1.類裏定義的,與構造函數、普通函數是一個級別縮進的。(下面例子裏的num)
2.在類外定義的,直接用類名.變量名新增類變量。(下面例子裏的myvar)
讀取
1.直接用類名的屬性 獲取:類名.類變量 (下面例子裏的Member.num和Member.myvar)
2.先實例化類,實例化對象的屬性 獲取 :實例對象.類變量 (下面例子裏的M.num和M.myvar)
調用
1. 在類裏面調用:類名.類變量,不能直接用類變量,即應爲Member.num而不是num
# -*- coding: utf-8 -*-
class Member():
num=2 #類變量,可以直接用類調用,或用實例對象調用
def __init__(self,x,y):
self.x=x #實例變量(成員變量),需要它是在類的構造函數內以self.開頭來定義的
self.y=y
def add(self):
total=2 #局部變量
self.vara=3 # 雖是以self.給出,但並沒有在構造函數中進行初始化
self.varb=4
fina=(self.x+self.y)*total
return fina
def fuc(self,a,b):
self.varc=a #成員變量,他們在成員函數fuc()中定義
self.vard=b
self.x+=2
self.y+=2
self.vara+=3
self.varb+=Member.num
Member.myvar = 'huhuh'
print(Member.num,Member.myvar)
M=Member(1,2)
print(M.num,M.myvar)
2.實例(成員)變量
(1)構造函數裏的成員變量:
定義:在__init__(self,成員變量)
讀取:只能實例對象.成員變量,不能類名.成員變量,即只能M.x不能Member.x
調用:構造函數的成員變量,顧名思義:在類實例化的時候,就需要給該變量賦值。類裏的普通函數可直接調用該變量,方式爲:self.成員變量,
作用範圍:類裏面的全局變量,其值可以被其他函數修改
(2)普通函數裏的成員變量
定義:在類裏的普通函數def xxx(self,成員變量)
讀取:只能實例對象.成員變量,不能類名.成員變量,即只能M.vara不能Member.vara
調用:方式爲self.成員變量,只有在類實例化後調用該普通函數,此時,該成員變量纔會生,看下面的例子:必須先調用add函數後,fuc函數裏的self.vara和self.varb纔會正常執行,不報錯。
作用範圍:類裏面的全局變量,其值可以被其他函數修改
3.局部變量
局部變量相對就簡單很多了,跟不在類裏面的def函數的局部變量是一樣的。
作用範圍:該函數內部
總結:成員函數
1.不同點
(1)構造函數裏的成員變量,在類實例化之後,就可以使用
(2)在類裏普通函數裏的 成員變量,只能先調用該函數,才能使用該成員變量。
2.相同點:
(1)在類裏,都是全局的