I have read about new way to call ancestor's constructor via super(..).__init__()
and wanted to use it. I have a directory dataset with three files: __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')
and Dataset.py
. When I use it from ../dataset
like this
from dataset import CSVDataset
data = CSVDataset('test/data1')
it works only with Dataset.__init__(self)
. It should work with super(CSVDataset, self).__init__()
but it does not. Why is that?
update: I get error
>>> 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
Dataset draft:
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