用法:
@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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。