【发布时间】:2017-01-15 09:25:47
【问题描述】:
根据Python 中的一些recepies 来定义Abstract class 我们应该声明它是这样的abcmeta:
class BaseStrategy(metaclass=ABCMeta):
但是如果这个类已经是其他类的子类呢?
class BaseStrategy(bt.Strategy):
改用其他选项(interfaces、exception 在基类中)?
注意我试过了:
class BaseStrategy(bt.Strategy, metaclass=ABCMeta):
有了这样的回溯:
Traceback (most recent call last):
File "D:/Projects/trading-bot/main/lab/backtrader/netflix.py", line 13, in <module>
from main.lab.strategy import RSISimple, RSIBuySell, SMACross, SMA_RSI, HolyGrail, MACD_ADX, BBands
File "D:\Projects\trading-bot\main\lab\strategy\__init__.py", line 1, in <module>
from .rsi_simple import *
File "D:\Projects\trading-bot\main\lab\strategy\rsi_simple.py", line 3, in <module>
from main.lab.strategy.base_strategy import BaseStrategy
File "D:\Projects\trading-bot\main\lab\strategy\base_strategy.py", line 6, in <module>
class BaseStrategy(bt.Strategy, metaclass=ABCMeta):
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
bt.Strategy 也可能使用抽象类。
【问题讨论】:
-
也在
Backtrader(使用的库)论坛上提问:community.backtrader.com/topic/114/strategy-inheritance/6
标签: python inheritance abstract-class