1,抽象基類(abstract base class或者 abcs)用於
定義一組必須被類的「鴨子型別」例項實現的方法與屬性,可以繼承抽象基類本身的類作為類的例項,但是必須提供所有適合的方法。
from collections.abc import container
class testcontainer:
def __contains__(self,x):
return true
mycontainer =testcontainer()
print(isinstance(mycontainer,container)) #true
print(issubclass(testcontainer,container)) #true
這種就是鴨子型別比傳統多型更棒的原因,可以不使用繼承關係就你能建立 「是乙個」的關係。
2, 建立抽像基類
import abc
class testabc(metaclass=abc.abcmeta):
@abc.abstractmethod
def play(self):
pass
@abc.abstractproperty
def name(self):
pass
# ta=testabc()
# print(ta)
class myabc(testabc):
name="kule"
def play(self):
print("play...")
# mt=myabc()
print(isinstance(myabc(),testabc)) #true
print(issubclass(myabc,testabc)) #true
myabc 是testabc的子類,但是沒有真正繼承testabc。
常見的物件導向語言通常在類的介面和介面的實現上有明確的區分,例如inte***ce關鍵字,用於定義類必須包含的方法,但是不需要實現,這樣就抽象出來了乙個介面。
任何類都可以明確宣告它實現自某個介面。
python的abcs幫助提供介面的功能,同時也保留了鴨子型別的特點。
python抽象基類理解
抽象基類它提供了介面,但是又沒有去把介面實現的類,需要由子類完成。感覺它就是老闆,只告訴你要完成專案a,你接到專案a後 繼承 你自己去把它完成。抽象基類特點 1.繼承類必須實現抽象基類的方法 2.抽象基類無法例項化 1.why 抽象基類?譬如要開發乙個專案,你要規定專案開發者要去完成某些介面,有些介...
python 中抽象基類簡介
簡介 python中雖然鴨子型別很強大,但鴨子型別也有著不足。具體關於分類可以參照水禽的分類理解。因此,參照水禽的分類學演化,我建議在鴨子型別的基礎上增加白鵝型別 goose typing 白鵝型別指,只要cls是抽象基類,即cls的元類是abc.abcmeta,就可以使用isinstance ob...
python3的常用語法 Python3基本語法
編碼 預設情況下,python3原始檔以utf 8編碼,所有字串都是unicode字串,也可以為原始檔指定編碼。coding cp 1252 識別符號第乙個字元必須是字母表中字母或下劃線 識別符號的其他的部分有字母 數字和下劃線組成。識別符號對大小寫敏感。python保留字 保留字即關鍵字,我們不能...