多個數據屬性經過一個類實例化的對象作關聯算法
# -*- coding:utf8 -*- class Forest: #定義總類結合-森林 def __init__(self,other): #定義類的屬性 self.other = other #總類中的類別 self.addr = Animal() #把其它類別結合到總類中 self.type = Plant() class Animal: #定義的動物類 def _animal(self): #定義的動物屬性 print("這是動物類別") class Plant: #定義的植物類 def _plant(self): #定義的植物屬性 print("這是植物類別") P = Forest("測試") #總類實例化 print(P.other) #總類自定義類輸出 P.addr._animal() #總類結合的其它類輸出
測試 這是動物類別
經過集成能夠派生(衍生)出新的方法函數
# -*- coding:utf8 -*- class Forest: #定義的父類 def __init__(self,name): self.Name = name def action(self): print("%s是很是厲害的" %self.Name) class Subclass(Forest): #子類,(衍生)出新的類 print("森林裏邊") P = Subclass("猴子") #實例化子類 P.action() #子類調用父類屬性
森林裏邊 猴子是很是厲害的
# -*- coding:utf8 -*- class Forest: #定義的父類1 def __init__(self,name): self.Name = name def action1(self): print("%s是很是厲害的" %self.Name) class Activity: #定義的父類2 def __init__(self,obj): self.Obj = obj @staticmethod def action2(describe): print("很是的%s" %describe) class Subclass(Forest,Activity): #子類,(衍生)出新的類 print("森林裏邊") P = Subclass("猴子") #實例化子類 P.action1() #調用父類1屬性 P.action2("靈活") #調用父類2屬性
森林裏邊 猴子是很是厲害的 很是的靈活
父類規定子類必需要使用的類方法,方便程序歸一化設計測試
接口繼承示例this
# -*- coding:utf8 -*- import abc class All_file(metaclass=abc.ABCMeta): #父類定義的方法,限定子類使用方法 @abc.abstractmethod def a(self): #限制子類方法1 pass @abc.abstractmethod def b(self): #限制子類方法2 pass class new(All_file): #子類繼承的方法使用,必需要實現父類方法,不然沒法實例化 def a(self): print("繼承的類方法1") def b(self): print("繼承的類方法2") P = new() P.a() P.b()
繼承的類方法1 繼承的類方法2
Python的類能夠繼承多個類,Java和C#中則只能繼承一個類設計
Python的類若是繼承了多個類,那麼尋找方法有兩種:深度優先和廣度優先rest
對於定義的每個類,Python計算出一個方法解析順序(MRO)列表,MRO列表就是全部基類的線性順序列表。MRO列表的構造是經過一個C3線性化算法來實現的。code
子類會先於父類被檢查對象
多個父類會根據它們在列表中的順序被檢查繼承
若是對下一個類存在兩個合法的選擇,則選擇第一個父類接口
繼承順序結果示例
# -*- coding:utf8 -*- class A: def test(self): print("this is A") class B(A): def test(self): print("this is B") class C(A): def test(self): print("this is C") class D(B,C): def test(self): print("this is E") print(D.__mro__)
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
普通調用
# -*- coding:utf8 -*- class A: def __init__(self,name,forest): self.name = name self.forest = forest def Brief (self): print("%s在%s~" %(self.name,self.forest)) class B(A): #父類屬性繼承 def __init__(self,name,forest,action): #派生新的方法 A.__init__(self,name,forest) #父類屬性快捷引用 self.action = action def Events(self): B.Brief(self) print("%s在%s裏邊%s~" % (self.name, self.forest,self.action)) P = B("猴子","森林","跳舞") P.Events()
猴子在森林~ 猴子在森林裏邊跳舞~
super()函數方法調用
#-*- coding:utf8 -*- class A: def __init__(self,name,forest): self.name = name self.forest = forest def Brief (self): print("%s在%s~" %(self.name,self.forest)) class B(A): #父類屬性繼承 def __init__(self,name,forest,action): #派生新的方法 super().__init__(name,forest) #Python3調用父類屬性方法 # super(B,self).__init__(name,forest) #Python2調用父類屬性方法 self.action = action def Events(self): B.Brief(self) print("%s在%s裏邊%s~" % (self.name, self.forest,self.action)) P = B("猴子","森林","跳舞") P.Events()
猴子在森林~ 猴子在森林裏邊跳舞~