python之路 繼承介面和多型

2022-07-23 10:54:16 字數 3378 閱讀 7426

抽象類最好不要用多繼承,而介面類可以

新式類:廣度優先

經典類:深度優先

模擬支付介面

from abc import abcmeta,abstractmethod

class payment(metaclass = abcmeta): # 元類

@abstractmethod

def pay(self,moeny):pass # 介面

def pay(self,money):

class alipay(payment):

def pay(self,money):

print('支付寶 支付了%s'% money)

class wechatpay(payment): # 不呼叫就報錯了

def fuqian(self, money):

def pay(self,moeny):pass

def payment(pay_obj,money): # 偽介面

pay_obj.pay(money)

ali1 = alipay()

# ali1.pay(200)

payment(ali1,200)

wechatpay1 = wechatpay

介面隔離

from abc import abcmeta,abstractmethod

class fly_animal(metaclass=abcmeta):

@abstractmethod

def fly(self): pass

class swim_animal(metaclass=abcmeta):

@abstractmethod

def swim(self): pass

class walk_animal(metaclass=abcmeta):

@abstractmethod

def walk(self): pass

class dog(swim_animal,walk_animal):

def swim(self):

print('dog is swimming')

def walk(self):

print('dog is walking')

class parrot(fly_animal,swim_animal):

pass

d = dog()

# p = parrot()

抽象類

from abc import abcmeta,abstractmethod

class animal(metaclass = abcmeta):

@abstractmethod

def eat(self):

print('開啟糧食的袋子')

print('放乙個吃飯的碗')

print('把糧食倒在碗裡')

@abstractmethod

def sleep(self):

pass

class dog(animal):

def eat(self):

print('dog is eating')

def sleep(self):

print('dog is sleeping')

新式類:廣度優先

print(d.mro()) # 檢視廣度優先的優先順序

經典類:深度查詢

# 經典類:深度查詢

class a:

def test(self):

print('from a')

class b(a):pass

# def test(self):

# print('from b')

class c(a):

def test(self):

print('from c')

class e(b):pass

# def test(self):

# print('from e')

class f(c):

def test(self):

print('from f')

class d(e,f):pass

d().test()

新式類:廣度查詢

# 新式類:廣度查詢

class a(object): # python2.7中繼承object類,就是新式類,不繼承就是經典類

def test(self):

print('from a')

class b(a):pass

# def test(self):

# print('from b')

class c(a):

def test(self):

print('from c')

class e(b):pass

# def test(self):

# print('from e')

class f(c):

def test(self):

print('from f')

class d(e,f):pass

d().test()

python 自帶多型:

同一類事物的不同狀態

操作的時候不需要關係這個物件的資料型別,只要用就行了

來自為知筆記(wiz)

Java核心 介面 繼承和多型 多型

利用多型可以使程式具有良好的擴充套件性,並可以對所有類物件進行通用的處理。eg 定義乙個平行四邊形的類 parallelogram 在類中頂乙個 draw 方法。public class parallelogram 如果需要頂乙個繪製正方形的方法,通過定義乙個正方形類來處理正方形物件,會出現 冗餘的...

繼承 多型 介面

多型 編譯階段 編譯期間編譯器可以根據選擇引數的型別來選擇使用哪個方法,是因為方法已經通過方法的過載 在同乙個類 裡提前寫好。程式在編譯時,會在編譯型別中檢查是否具有所呼叫的方法。如果編寫 時,使用引用變數呼叫子類中的特有方法,或者呼叫過載了父類中的方法,而父類中找不到該方法,則會報編譯錯誤 執行階...

Python 繼承和多型

廖雪峰python 教程筆記 class animal object 父類 def run self print animal is running.class dog animal 子類 def run self print dog is running.class cat animal 子類 d...