我已经了解了通过调用祖先的构造函数的新方法,super(..).__init__()
并想使用它。我有一个包含三个文件的目录数据集:__init__.py
from .Dataset import Dataset
from .CSVDataset import CSVDataset
CSVDataset.py
import csv
import numpy as np
from dataset import Dataset
class CSVDataset(Dataset):
"""
reads dataset from csv file
"""
def __init__(self, file):
Dataset.__init__(self)
#super(CSVDataset, self).__init__()
reader = csv.reader(open(file, 'r'), delimiter=',')
x = list(reader)
self.container = np.array(x).astype('double')
和Dataset.py
。当我使用它../dataset
像这样
from dataset import CSVDataset
data = CSVDataset('test/data1')
它仅适用于Dataset.__init__(self)
。它应该可以,super(CSVDataset, self).__init__()
但不能。这是为什么?
更新:我得到错误
>>> data = CSVDataset('test/data1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "dataset/CSVDataset.py", line 13, in __init__
super(CSVDataset, self).__init__()
TypeError: must be type, not classobj
数据集草稿:
class Dataset(Iterable):
"""
base class representing dataset API.
Remember, dataset is used for learning.
"""
def __init__(self):
self.container = None
self.counter = None
....
class Iterable:
def __iter__(self):
self.counter = 0
return self
def __next__(self):
try:
label = self[self.counter]
self.counter += 1
return label
except:
raise StopIteration
您的Dataset
课程是Python 2.x旧样式的课程。super()
仅适用于新样式的类,其中类层次结构最终从继承object
。
要修复,请Dataset
从继承object
:
class Dataset(object):
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句