1.抽象方法的概念
之前我們定義乙個基類的時候,如果要求子類必須重寫父類中的某乙個方法,可以這樣做:
定義乙個名為pizza的基類,讓其get_radius方法必須被子類繼承
class pizza(object):
@staticmethod
def get_radius():
raise notimplementederror
如果子類沒有重寫該方法就會觸發錯誤
class sub_pizza(pizza):
pass
sub_pizza().get_radius()
錯誤資訊如下:
raise notimplementederror
notimplementederror
但是上述方法的缺點是:如果只例項化了子類,而沒有呼叫方法,notimplementederror就不會被觸發;
抽象方法允許我們在類例項化的同時,通過觸發異常來告訴我們那些父類中的方法是必須在子類中重寫的,而不需要呼叫方法才可以知道哪些方法是必須要被重寫的;
2.抽象方法的實現
抽象方法的實現使用abc模組實現
定義基類,並指定其中的抽象方法(必須在子類中被重寫)
import abc
class basepizza(object):
__metaclass__ = abc.abcmeta
@abc.abstractmethod
def get_radius(self):
"""return the ingredient list"""
定義子類繼承上述類:
class dietpizza(basepizza):
pass
dietpizza()
執行結果:
typeerror: can't instantiate abstract class dietpizza with abstract methods get_radius
由於在子類中沒有重寫方法get_radius,在例項化子類的時候,報typeerror;
正確**如下:
class dietpizza(basepizza):
@staticmethod
def get_radius(self):
return none
dietpizza()
Python抽象方法
from abc import abcmeta,abstractmethod class basemessage object 抽象類方法一 defsend self,x1 必須繼承basemessage,然後其中必須編寫send方法。用於完成具體業務邏輯。raise notimplementede...
python學習方法 十二種學習Python的方法
python學習方法 python是地球上最流行的程式語言之一。它被世界各地的開發商和製造商所接受。大多數linux和macos計算機都預裝了python版本,現在,即使是少數windows計算機 商也正在安裝python。也許您參加聚會遲到了,您想學習但不知道該去 這12個資源將幫助您入門,並逐步...
python中迭代器的基本方法 Python迭代器
迭代器是可以迭代的物件。在本教程中,您將了解迭代器的工作原理,以及如何使用 iter 和 next 方法構建自己的迭代器。迭代器在python中無處不在。它們優雅地實現在迴圈,推導,生成器等中,但隱藏在明顯的視覺中。python中的迭代器只是乙個可以迭代的物件。乙個將一次返回資料的物件或乙個元素。從...