TypeError: Can't instantiate abstract class with abstract methods
TypeError: Can't instantiate abstract class with abstract methods
我看过类似的问题here and ,但他们并没有真正回答我遇到的问题,也许有人可以向我解释这个错误。
我正在使用 this backtesting package 创建一个股票回测环境,但我正在对它的实施进行一些修改。我在下面的主要代码中创建了一个最小的可重现示例:
# pip install backtesting
from backtesting import Strategy
class StrategyParentClass:
def __init__(self, whatever=True):
self.whatever=whatever
class StrategyChildClass(StrategyParentClass, Strategy):
def __init__(self):
super().__init__()
self.title="StrategyTitle"
def next(self):
print("YAY")
child_class_object = StrategyChildClass()
现在的代码给出错误:
Traceback (most recent call last):
File "test2.py", line 16, in <module>
child_class_object = StrategyChildClass()
TypeError: Can't instantiate abstract class StrategyChildClass with abstract methods init, next
解释一下,我有一个parent策略class和一个child策略class。 child 策略 class 继承了 parent class 的属性,以及 Strategy
class 来自回测包的属性。当您查看他们提供的示例代码时,您的策略 class 应该看起来 like this。所以你的 child class 应该有一个 next
方法,我的也有。
但是,我正在尝试让我的 child class 继承自 2 parent classes,我认为这是让我感到悲伤的原因。当您删除 StrategyChildClass(StrategyParentClass, Strategy):
行中的 , Strategy
时,它会 运行 而不会报错。
所以在这种情况下,我如何实例化我自己的 parent class,并让 child class 从 IT 继承,以及导入的 Strategy
class parent,不报这个错?回测包在 运行 交易时使用此 child class' 属性和 next
方法。
您的问题是该库中的 Strategy
class 定义了一个名为 init
(不是 __init__
)的抽象方法,您必须实现该方法。就他们而言,这显然是糟糕的命名,因为它很容易将 init
方法与 class.
的构造函数混淆
我不能在这里谈论你的实现,但一般来说,你必须在调用它的子class中实现任何基class的抽象方法。 ('Strategy' 中的两个抽象方法是 'init' 和 'next',而你的子 class 中只有 'next' 方法。这段代码应该可以解决它,不过可能不会按照您的意愿行事)
# pip install backtesting
from backtesting import Strategy
class StrategyParentClass:
def __init__(self, whatever=True):
self.whatever=whatever
class StrategyChildClass(StrategyParentClass, Strategy):
def __init__(self):
super().__init__()
self.title="StrategyTitle"
def next(self):
print("YAY")
def init(self):
pass
child_class_object = StrategyChildClass()
我看过类似的问题here and
我正在使用 this backtesting package 创建一个股票回测环境,但我正在对它的实施进行一些修改。我在下面的主要代码中创建了一个最小的可重现示例:
# pip install backtesting
from backtesting import Strategy
class StrategyParentClass:
def __init__(self, whatever=True):
self.whatever=whatever
class StrategyChildClass(StrategyParentClass, Strategy):
def __init__(self):
super().__init__()
self.title="StrategyTitle"
def next(self):
print("YAY")
child_class_object = StrategyChildClass()
现在的代码给出错误:
Traceback (most recent call last):
File "test2.py", line 16, in <module>
child_class_object = StrategyChildClass()
TypeError: Can't instantiate abstract class StrategyChildClass with abstract methods init, next
解释一下,我有一个parent策略class和一个child策略class。 child 策略 class 继承了 parent class 的属性,以及 Strategy
class 来自回测包的属性。当您查看他们提供的示例代码时,您的策略 class 应该看起来 like this。所以你的 child class 应该有一个 next
方法,我的也有。
但是,我正在尝试让我的 child class 继承自 2 parent classes,我认为这是让我感到悲伤的原因。当您删除 StrategyChildClass(StrategyParentClass, Strategy):
行中的 , Strategy
时,它会 运行 而不会报错。
所以在这种情况下,我如何实例化我自己的 parent class,并让 child class 从 IT 继承,以及导入的 Strategy
class parent,不报这个错?回测包在 运行 交易时使用此 child class' 属性和 next
方法。
您的问题是该库中的 Strategy
class 定义了一个名为 init
(不是 __init__
)的抽象方法,您必须实现该方法。就他们而言,这显然是糟糕的命名,因为它很容易将 init
方法与 class.
我不能在这里谈论你的实现,但一般来说,你必须在调用它的子class中实现任何基class的抽象方法。 ('Strategy' 中的两个抽象方法是 'init' 和 'next',而你的子 class 中只有 'next' 方法。这段代码应该可以解决它,不过可能不会按照您的意愿行事)
# pip install backtesting
from backtesting import Strategy
class StrategyParentClass:
def __init__(self, whatever=True):
self.whatever=whatever
class StrategyChildClass(StrategyParentClass, Strategy):
def __init__(self):
super().__init__()
self.title="StrategyTitle"
def next(self):
print("YAY")
def init(self):
pass
child_class_object = StrategyChildClass()