我尝试使用
初始化类 tsf = TimeSeriesFeature(cut_avg, interval)
但是我得到了TypeError:__ new __()缺少1个必需的位置参数:'namespace'。
TimeSeriesFeature的初始代码如下:
class TimeSeriesFeature(BasicFeature):
def __init__(self, cut_avg, interval):
super().__init__()
self.cut_avg = cut_avg
self.interval = interval
self.get_avg()
和BasicFeature初始化代码:
class BasicFeature(ABCMeta):
def __init__(self):
self.times = {}
self.avg = {}
我正在使用python3.5。有什么错吗?
答案 0 :(得分:4)
你得到的错误来自于metaclass的实例化不使用它的__init__
方法,而是它的__new__
方法(不包括self)期望3个参数,最后被说明< EM>命名空间
现在,您的类继承自ABCMeta
(a metaclass),因此它也是元类:
class BasicFeature(ABCMeta):
...
但我认为您宁愿将ABCMeta
设置为您班级的元类:
class BasicFeature(metaclass=ABCMeta):
...
这样你的班级就变成了一个普通的班级,ABCMeta
就是它的元类。
如果您希望BasicFeature
成为一个抽象(换句话说,无法初始化)类,请为其添加一个抽象方法,如下所示:
class BasicFeature(metaclass=ABCMeta):
@abstractmethod
def get_avg():
pass
并在没有@abstractmethod
装饰器的子类中重载它:
class TimeSeriesFeature(BasicFeature):
def get_avg():
# ... some code
# ... some code
然后,尝试实例化BasicFeature
的用户将收到有关get_avg()
抽象的错误,但实例化TimeSeriesFeature
的用户则不会。有关详情,请参阅the documentation