【发布时间】:2018-06-15 10:37:30
【问题描述】:
我有一个接口类,它定义了对活动“使用中”类的要求:
class Portfolio(ABC):
@abstractmethod
def update_portfolio(self):
raise NotImplementedError
@abstractmethod
def update_from_fill(self):
raise NotImplementedError
@abstractmethod
def check_signal(self, signal_event):
raise NotImplementedError
方法 update_portfolio 和 update_from_fill 都是在 99% 的必需案例中相同的方法。只有 check_signal 方法会有所不同。因此,为了避免一次又一次地编写相同的代码,我定义了一个基类,其中包含 update_portfolio 和 update_from_fill 的默认方法:
class BaseBacktestPortfolio(Portfolio):
def __init__(self, ...):
...
def update_portfolio(self, ...):
...
def update_from_fill(self, ...):
...
最后,我有一个继承自 BacktestPortfolio 类的类,它指定了 check_signal 方法的正确实现:
class USBacktestPortfolio(BaseBacktestPortfolio):
def check_signal(self, ...):
...
现在,问题是我的编辑器抱怨 BacktestPortfolio 类没有所有必需的抽象方法。当然,我可以忽略这一点,但如果我能确保无法从 BacktestPortfolio 类中实例化一个对象,那么完美的场景将是。
这可能吗?和/或有没有更正确的方法来实现这样的结构?
【问题讨论】:
-
你试过实例化
BaseBacktestPortfolio吗?它已经是一个通过继承的 ABC,应该防止实例化。
标签: python python-3.x abstract-class