python--面向對象—接口


開放封閉原則
依賴導致原則
接口隔離原則
繼承多態
抽象類和接口類
    編程思想:為子類做規范
 歸一化設計:幾個類都實現了相同的方法
 抽象類:最好單繼承,且可以簡單的實現功能
 接口類:可以多繼承,且最好不實現具體功能
 實現接口類和抽象類的語法

 from abc import abstractclassmethod,ABCMeta
 class Xx(metaclass=ABCMeta):
   @abstractclassmethod
   def Yy():pass

鑽石繼承問題

    python的新式類,和經典類在繼承順序上的不同
 新式類:廣度優先
    查看繼承順序  子類名.mro()
 經典類:深度優先
新式類和經典類的區別:定義階段,經典類有object新式類不用,子類執行父類中的同名方法上,繼承問題
多態
    python天生支持多態 

接口類

 

class Applepay:
     def payment(self,money):
  print('蘋果 支付了%d元'%money)
class Alipay:
     def payment(self,money):
  print('支付寶 支付了%d元'%money)
def payment(pay_obj,money):
 pay_obj.payment(money)
apple=Applepay()
ali=Alipay()
payment(apple,100)
payment(ali,100)

歸一化設計

from abc import abstractmethod,ABCMeta
class Payment(metaclass=ABCMeta): #抽象類/接口類
      @abstractmethod            #給接口類加裝飾器
   def payment(self,money):pass
class Applepay(Payment):
     def payment(self,money):
     print('蘋果 支付了%d元'%money)
  def payment(pay_obj,money):
     pay_obj.payment(money)
class Alipay(Payment):
     def payment(self,money):
      print('支付寶 支付了%d元'%money)
  def payment(pay_obj,money):
     pay_obj.payment(money)
class We(Payment):
     def fuqian(self,money)
  print('微信支付了%d元'%money)
apple=Applepay()
ali=Alipay()
we=We()
payment(apple,100)
payment(ali,100)
payment(we,100)

這樣的話,如果子類里面沒有要用的方法的話,在實例化對象的時候就會報錯
如果有這個方法的話,實例化和使用的時候都不會報錯。
主要是用來限制和規定某一類必須要用到某個方法
歸一化設計:
1.接口類 不實現具體的方法,並且可以多繼承
2.實現具體內容,做一些基礎實現,並且不推薦多繼承

多繼承

 

from abc import abstractclassmethod,ABCMeta
class Fly_Animal(metaclass=ABCMeta):
    @abstractclassmethod                   #限制必須用fly方法
    def fly(self):
        print('')
class Walk_Animal:
    def walk(self):
        print('')
class Swim_Animal:
    def swim(self):
        print('游泳')
class Tiger(Walk_Animal):
       def si(self):
           pass
class Tiane(Walk_Animal,Swim_Animal,Fly_Animal):   #多繼承
    def fly(self):
        super().fly()
class Qingwa(Walk_Animal,Swim_Animal):
    def fd(self):
        pass
tiane=Tiane()
tiane.fly()

多繼承限制

class D:
    def test(self):
        print('D')
class B(D):                    #B要是沒有找D
    def test(self):
        print('B')
class C(D):
    def test(self):
        print('C')
class A(B,C):
    pass
    # def test(self):          #如果沒有就去找B,B和D都沒有再C
    #     print('A')
a=A()
a.test()

深度優先↑  新式類廣度優先
所有類繼承的基類object新式類 python3中不用強制繼承
.mro()看順序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM