Python(類屬性、類函式、靜態方法)筆記
阿新 • • 發佈:2019-01-10
版本:Python3.6.1
#coding = utf -8 """ time:2018年4月2日 14:09:45 function:類 """ """ 類屬性(類變數) 定義位置: 類裡面,類方法外 特點: 屬於類所有,所有物件共享一個變數 訪問方式: 成員變數訪問方式(回顧): 類外訪問: 物件名.屬性名 類內訪問: self.屬性名 類變數訪問方式: 類外訪問: 1.物件名.類屬性名(不推薦使用) 如果給類屬性名賦值,會先增加一個成員變數與類屬性名一致,類屬性不改變 如果獲取類屬性先找成員屬性,找不到再找類屬性 注意:該方法可能會出現類屬性與成員屬性重名 2.類名.物件名 與成員變數無關,單純的類屬性操作 類內訪問: 1.self.類屬性名 2.類名.類屬性名 類方法 語法:用@classmethod 描述,引數為cls @classmethod def xxx(cls): pass 特徵: 在類方法中,不能使用self關鍵字 類方法屬於類所有,不同於成員方法屬於物件 呼叫方法: 1.類名.方法名() 2.物件名.方法名() 提示: 一般情況下,工具類中的方法,使用類方法 靜態方法 語法:用@staticmethod描述 @staticmethod def xxx(): pass 特徵: 沒有預設引數,沒有物件或類參與,等價於普通函式,比較少用 訪問方式: 1.類名.方法名() 2.物件名.方法名() 提示: 此方法很少用,一般都會被普通函式代替 """ class AA(): classProperty = "我是類屬性" def __init__(self,a,b): self.a = a #成員變數 self.b = b def memberFun(self): #成員方法 print("a = %d , b = %d"%(self.a,self.b)) print("self.classProperty = %s"%(self.classProperty)) #通過物件名.類屬性名訪問 print("AA.classProperty = %s"%(AA.classProperty)) #通過類名.類屬 @classmethod def classFun(cls,a_): #類方法 # print("a = %d , b = %d"%(cls.a,cls.b)) #無法使用,因為a b是成員變數,可以通過傳送物件訪問 print("a = %d , b = %d"%(a_.a,a_.b)) print("cls.classProperty = %s"%cls.classProperty) print("AA.classProperty = %s" % AA.classProperty) @staticmethod def staticFun(a_): print("a = %d , b = %d"%(a_.a,a_.b)) print("AA.classProperty = %s" % AA.classProperty) a = AA(1,2) a1 = AA(3,4) a.memberFun() a.classFun(a) #物件名.類方法 AA.classFun(a) #類名.類方法 print("靜態方法訪問1:") a.staticFun(a) print("靜態方法訪問2:") AA.staticFun(a) print("---"*29) print("a.classProperty = %s"%a.classProperty) print("a1.classProperty = %s"%a1.classProperty) print("AA.classProperty = %s"%AA.classProperty) a.classProperty = "我是新增,賦值,並不是修改類屬性的值" print("修改a.classproperty") print("a.classProperty = %s"%a.classProperty) print("a1.classProperty = %s"%a1.classProperty) print("AA.classProperty = %s"%AA.classProperty) AA.classProperty = "我是修改類屬性的值" print("修改AA.classproperty") print("a.classProperty = %s"%a.classProperty) #這裡在上面已經添加了,只訪問到成員變數 print("a1.classProperty = %s"%a1.classProperty) print("AA.classProperty = %s"%AA.classProperty)