Python抽象類更像JAVA的接口調用,在實現多態的封裝上有幫助:
這個知識點,技能樹诠釋例子比較好,但是,概念的定義有點累述,我做了簡潔化。
抽象類是一個特殊的類,只能被繼承,不能被實例化,
集成抽象類的子類必須實現抽象方法,否則會報錯:
import abc #利用abc模塊實現抽象類
class shuiguo(metaclass=abc.ABCMeta):
all_type='sg'
def name(self):
def func(self):
class Apple(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print('我是蘋果')
def func(self):
print('好吃')
class Pear(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print('我是梨子')
def func(self):
print('比蘋果甜')
apple =Apple()
pear=Pear()
apple.name()
apple.func()
pear.name()
pear.func()
print(pear.all_type)
print(apple.all_type)
輸出結果:
好吃
我是梨子
sg
sg
import abc #利用abc模塊實現抽象類
源碼這段
@abc.abstractmethod #定義抽象方法,無需實現功能
def name(self):
pass
這是一段抽象類的標准寫法,@abc.abstractmethod【實踐可以省略】, pass 是要寫的關鍵的語句。不寫的的話,會報錯:
IndentationError: expected an indented block
源碼這段
class Apple(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print(‘我是蘋果’)
Apple 是可以被實例化的類,繼承了抽象類shuiguo,這樣shuiguo的抽象類的方法name,func在實例化的Apple類裡面得到了具體的實現。
源碼這段:
apple =Apple()
pear=Pear()
apple.name()
apple.func()
pear.name()
pear.func()
將對象實例化,並調用了抽象類的方法。
import abc #利用abc模塊實現抽象類
class shuiguo(metaclass=abc.ABCMeta):
all_type='sg'
def name(self):
pass
def func(self):
pass
class Apple(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
class Pear(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
def name(self):
print('我是梨子')
apple =Apple()
pear=Pear()
apple.name()
apple.func()
pear.name()
pear.func()
print(pear.all_type)
print(apple.all_type)
【案,代碼修改去掉了抽象類的read,write的方法,會發生編譯錯誤】
File “”, line 20
class Pear(shuiguo): #子類繼承抽象類,可是必須定義read和write方法
^
IndentationError: expected an indented block