用法:
@abc.abstractmethod
指示抽象方法的裝飾器。
使用這個裝飾器需要類的元類是
ABCMeta
或者是從它派生的。除非重寫其所有抽象方法和屬性,否則無法實例化具有從ABCMeta
派生的元類的類。可以使用任何正常的‘super’ 調用機製來調用抽象方法。abstractmethod()
可用於聲明屬性和說明符的抽象方法。僅使用
update_abstractmethods()
函數支持向類動態添加抽象方法,或嘗試修改方法或類的抽象狀態。abstractmethod()
僅影響使用常規繼承派生的子類;使用 ABC 的register()
方法注冊的 “virtual subclasses” 不受影響。當
abstractmethod()
與其他方法說明符結合應用時,應作為最內層的裝飾器應用,如以下使用示例所示:class C(ABC): @abstractmethod def my_abstract_method(self, arg1): ... @classmethod @abstractmethod def my_abstract_classmethod(cls, arg2): ... @staticmethod @abstractmethod def my_abstract_staticmethod(arg3): ... @property @abstractmethod def my_abstract_property(self): ... @my_abstract_property.setter @abstractmethod def my_abstract_property(self, val): ... @abstractmethod def _get_x(self): ... @abstractmethod def _set_x(self, val): ... x = property(_get_x, _set_x)
為了與抽象基類機製正確互操作,說明符必須使用
__isabstractmethod__
將自己標識為抽象。通常,如果用於構成說明符的任何方法是抽象的,則此屬性應為True
。例如,Python 的內置property
相當於:class Descriptor: ... @property def __isabstractmethod__(self): return any(getattr(f, '__isabstractmethod__', False) for f in (self._fget, self._fset, self._fdel))
注意
與 Java 抽象方法不同,這些抽象方法可能有一個實現。可以通過
super()
機製從覆蓋它的類調用此實現。這對於使用協作multiple-inheritance 的框架中的super-call 作為end-point 可能很有用。
相關用法
- Python abc.abstractproperty用法及代碼示例
- Python abc.abstractstaticmethod用法及代碼示例
- Python abc.abstractclassmethod用法及代碼示例
- Python abc.ABCMeta用法及代碼示例
- Python abc.ABC用法及代碼示例
- Python abc.ABCMeta.register用法及代碼示例
- Python abs()用法及代碼示例
- Python ast.MatchClass用法及代碼示例
- Python ast.ListComp用法及代碼示例
- Python ast.Lambda用法及代碼示例
- Python asyncio.BaseTransport.get_extra_info用法及代碼示例
- Python ast.IfExp用法及代碼示例
- Python unittest assertNotIsInstance()用法及代碼示例
- Python ast.Return用法及代碼示例
- Python Tkinter askopenfile()用法及代碼示例
- Python ast.Subscript用法及代碼示例
- Python asyncio.shield用法及代碼示例
- Python asyncio.run用法及代碼示例
- Python argparse.ArgumentParser.convert_arg_line_to_args用法及代碼示例
- Python unittest assertIsNotNone()用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 abc.abstractmethod。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。