Python 不提供一些内置的继承机制来从基方法调用派生类中的基虚方法或抽象方法的实现
我想知道 python 中最接近提供以下结构的东西是什么:
class Base(?):
def some_abstract_interface(self, **params):
raise Unimplemented()
def some_base_impl(self):
self.some_abstract_interface(self, a=4, b=3, c=2)
class Derived(Base):
@neat_override_decorator_here?
def some_abstract_interface(self, **params):
print("actual logic here {0}".format(params))
d = Derived()
d.some_base_impl()
>>>output: actual logic here a=4, b=3, c=2
请您参考如下方法:
你已经可以在没有任何整洁装饰器的情况下做到这一点:
class Base:
def some_abstract_interface(self):
raise NotImplemented
def some_base_impl(self):
self.some_abstract_interface()
class Derived(Base):
def some_abstract_interface(self):
print('actual logic here')
Derived().some_base_impl()
这个输出:
actual logic here
如果你想强制执行Base是一个抽象类,不能用来直接实例化一个对象,那some_abstract_interface意味着是一个抽象方法,并且总是必须被子类方法的实现覆盖,您可以使基类继承自 ABC abc 的类别用 abc.abstractmethod 模块和修饰抽象方法像这样:
import abc
class Base(abc.ABC):
@abc.abstractmethod
def some_abstract_interface(self):
raise NotImplemented
def some_base_impl(self):
self.some_abstract_interface()
class Derived(Base):
def some_abstract_interface(self):
print('actual logic here')
Derived().some_base_impl()
