python TypeError:__ new __()缺少1个必需的位置参数:'namespace'

时间:2016-05-26 09:47:03

标签: python python-3.x

我尝试使用

初始化类

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。有什么错吗?

1 个答案:

答案 0 :(得分:4)

你得到的错误来自于metaclass的实例化不使用它的__init__方法,而是它的__new__方法(不包括self)期望3个参数,最后被说明< EM>命名空间

现在,您的类继承自ABCMetaa 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