我需要类似 Python (3.2) 中的 abstract protected
方法:
class Abstract:
def use_concrete_implementation(self):
print(self._concrete_method())
def _concrete_method(self):
raise NotImplementedError()
class Concrete(Abstract):
def _concrete_method(self):
return 2 * 3
定义一个“抽象”方法只是为了引发 NotImplementedError 真的有用吗?
对抽象方法使用下划线是否是一种好的风格,在其他语言中会受到protected
的影响?
抽象基类 (abc) 会改进什么吗?
最佳答案
在 Python 中,您通常会避免同时使用这些抽象方法。您通过文档定义一个接口(interface),并简单地假设传入的对象满足该接口(interface)(“鸭子类型”)。
如果你真的想用抽象方法定义一个抽象基类,这可以使用 abc
来完成。模块:
from abc import ABCMeta, abstractmethod
class Abstract(metaclass=ABCMeta):
def use_concrete_implementation(self):
print(self._concrete_method())
@abstractmethod
def _concrete_method(self):
pass
class Concrete(Abstract):
def _concrete_method(self):
return 2 * 3
同样,这不是 Python 的常用方式。 abc
模块的主要目标之一是引入一种重载 isinstance()
的机制,但通常会避免 isinstance()
检查鸭子打字的青睐。如果需要,请使用它,但不要作为定义接口(interface)的通用模式。
关于python - Python中的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856963/