我尝试使用初始化类
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()
Run Code Online (Sandbox Code Playgroud)
和 BasicFeature 初始化代码:
class BasicFeature(ABCMeta):
def __init__(self):
self.times = {}
self.avg = {}
Run Code Online (Sandbox Code Playgroud)
我正在使用python3.5。有没有什么错误?
您得到的错误是由于元类的实例化不使用它的__init__方法,而是它的__new__方法(不包括 self)需要 3 个参数,最后一个参数是namespace。
就目前情况而言,您的类继承自ABCMeta(这是一个元类),因此它也是一个元类:
class BasicFeature(ABCMeta):
...
Run Code Online (Sandbox Code Playgroud)
但我认为你宁愿设置ABCMeta为你的类的元类:
class BasicFeature(metaclass=ABCMeta):
...
Run Code Online (Sandbox Code Playgroud)
这样你的类就成为一个普通的类,因为ABCMeta它是元类。
如果您想BasicFeature成为一个抽象(换句话说,无法初始化)类,请向其添加一个抽象方法,如下所示:
class BasicFeature(metaclass=ABCMeta):
@abstractmethod
def get_avg():
pass
Run Code Online (Sandbox Code Playgroud)
并在没有装饰器的子类中重载它@abstractmethod:
class TimeSeriesFeature(BasicFeature):
def get_avg():
# ... some code
# ... some code
Run Code Online (Sandbox Code Playgroud)
然后,尝试实例化的用户BasicFeature将收到有关抽象的错误get_avg(),但实例化的用户TimeSeriesFeature不会。文档中提供了更多详细信息
| 归档时间: |
|
| 查看次数: |
22727 次 |
| 最近记录: |