Python没有提供一些内置的继承机制来从基本方法中调用派生类中基本虚拟或抽象方法的实现
我想知道python中最能提供以下结构的东西是什么
while
答案 0 :(得分:6)
您无需任何整洁的装饰器就可以做到这一点:
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()
答案 1 :(得分:4)
您只需自己拨打电话即可。从句法上讲,这不会再重,而是您放置的装饰器。
class Derived(Base):
def some_abstract_interface(self, **params):
self.some_base_impl()
print('actual logic her {0}.format(params))
实际上,您甚至不需要将some_base_impl
和some_abstract_interace
分开;抽象方法可以实现,但仍然需要重写。
from abc import ABC, abstractmethod
class Base(ABC):
@abstractmethod
def some_abstract_interface(self, **params):
pass # Put base implementation here
class Derived(Base):
def some_abstract_interface(self, **params):
super().some_abstract_interface(**params)
print("actual logic here {0}".format(params))