#-*- coding=utf-8 -*- # 簡單的一個類實例 class Ta(): var1 = 'demo' var2 = 'test' def fun(): print('簡單測試類方法') # 使用類的方法和屬性 print(Ta.var1) Ta.fun() # 在同一個類裏,方法如何調用類屬性 class Demo(): var1 = '被調用' # 在這裏是有使用classmethod和cls才能調用類屬性,缺一不可,否則會報錯 @classmethod def useAttributeInClass(cls): print(cls.var1) @classmethod def receivePatameters(cls, value): print('use value {} in the class'.format(cls.var1)) print('received a parameter, it is {}'.format(value)) # 測試Demo類的方法 Demo.receivePatameters(123) # 對於類屬性的修改 class ModifyValue(): value = 0 @classmethod def modifyvalue(cls): print('current value is {}'.format(cls.value)) cls.value = input('enter your number:') print('after modifide value, it is {}'.format(cls.value)) # 測試是否可以修改 m = ModifyValue() m.modifyvalue() # 類的構造函數和析構函數 # __init__ # __del__ class TestDelAndInit(object): def __del__(self): print('destroy success') def __init__(self,str): print('with parameter {} init success'.format(str)) # 測試析構函數和構造函數 t1 = TestDelAndInit('hello') del t1 # 類的繼承和多態 """ 1. 在定義類時,能夠在()裏寫上繼承的類名字,若是不須要繼承類的話最好寫上object 2. python支持多繼承 3. 若是父類中含有相同方法名,而且子類中沒有指定,則是按照從左到右的順序 4. 繼承的做用 * 繼承父類的方法和屬性 * 能夠覆蓋父類的屬性和方法 """ class Shape(object): var = object() "構造函數" def __init__(self,name): self.name = name "返回面積" def getArea(self): pass " 返回周長" def getC(self): pass "顯示對象的信息" def display(self): pass "一個默認函數,不作任何事" def doNothing(self): print('Shape do nothing with object {}'.format(self.var)) "顯示當前是哪一個類" def OutInfo(self): print('Hello,this is shape called {}'.format(self.name)) class Rectangle(Shape): # 定義一個類成員 var = 'rectangle' "構造函數" def __init__(self,width,height,name): # 父類構造函數的調用 super(Rectangle,self).__init__(name) self.width = width self.height = height "獲取Width" @property def getWidth(self): return self.width @property def getHeight(self): return self.height "重寫面積函數" def getArea(self): return self.width * self.height "重寫周長函數" def getC(self): return 2 * ( self.width + self.height) "在這裏重寫display必須加上self,否則在對象調用這個方法的時候會出現類型錯" def display(self): print('this is Rectangle') "使用類的成員變量" def showvar(cls): print('value of Rectangle is {}'.format(cls.var)) "多態函數的實現" def OutInfo(self): print('Hello,this is a shape called {}'.format(self.name)) # 測試Rectangle的方法和屬性 r = Rectangle(12,19,'Rectangle') print(type(r)) # 調用重載的方法 r.display() # 調用父類的方法 r.doNothing() # 調用計算面積函數 print('Area of r is {}'.format(r.getArea())) r.showvar() print('value of Rectangle is {}'.format(r.var)) "多態函數的實現" def OutInfoOfShape(shape): shape.OutInfo() # 測試多態函數是否成功 OutInfoOfShape(Shape('Basic')) OutInfoOfShape(r)