使用靜態方法實現類的多態 類的封裝--升級版 繼承升級版 ...
使用靜態方法實現類的多態
1 class Animal(object): 2 def __init__(self, noice, name): 3 self.noice = noice 4 self.name = name 5 6 @staticmethod #使用靜態方法裝飾以後,可以直接使用類進行調用。不必實例化。 7 def talk(self): 8 print('this is %s talk %s'%(self.name, self.noice)) 9 10 class Dog(Animal): 11 pass 12 13 class Cat(Animal): 14 pass 15 16 d1 = Dog('汪汪汪', '哈士奇') 17 c1 = Cat('喵喵喵', '短尾') 18 Animal.talk(d1) #使用類調用統一的介面,對傳入的對象按照對象特有屬性進行處理,進而實現多態 19 Animal.talk(c1)
類的封裝--升級版
1 class F1(object): 2 def __init__(self, name): 3 self.name = name 4 def display(self): 5 print('F1', self.name) 6 7 class F2(object): 8 def __init__(self, args): 9 self.args = args 10 11 class F3(object): 12 def __init__(self, args): 13 self.args = args 14 c1 = F1('test') 15 c2 = F2(c1) 16 c3 = F3(c2) 17 print( c3.args.args.name )
#類中也可以封裝類。 17行列印結果為14行輸入參數test。 整個邏輯為:1、c3 = F3(c2) ==> c3.args = c2; 2、c2 = F2(c1) ==> c2.args = c1。再加上1的推論有c3.args.args = c1,重覆1,2推論有
c3.args.args.name = test
繼承升級版
1 class F1(object): 2 def a1(self): 3 print('F1a1') 4 def a2(self): 5 print('F1a2') 6 class F2(F1): 7 def a1(self): 8 self.a2() 9 print('F2a1') 10 def a2(self): 11 print('F2a2') 12 class F3(F2): 13 def a2(self): 14 print('F3a2') 15 c = F3() 16 c.a1() 17 #執行過程: 18 #1、c.a1先去執行F2.a1 19 #2、執行第9行代碼,該self.a2此時的self由於c是由F3實例化而來,所以此時self為c即self.a2需要先在類F3本地找a2方法。列印F3a2 20 #3、繼續執行第10行代碼,列印F2a1