1. 程式人生 > >面向對象3

面向對象3

行處理 init clas bject object animal 多態 static span

使用靜態方法實現類的多態

 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

面向對象3