Учитывая базовый класс, который содержит абстрактный метод:
class AbstractDataSource(object):
def __curateDataframe(self,dataFrame: pd.DataFrame):
notFoundColums = set(dataFrame.columns) - set (self.__acceptedHeaders)
for column in notFoundColums:
dataFrame.drop(column, axis=1, inplace=True)
return dataFrame
def Data(self):
df = self.__curateDataframe(self._dataFrame)
df = self.__computeDerivedIndicators(self._dataFrame)
df.fillna(0,inplace=True)
return df
@abc.abstractmethod
def __readData(self): pass
Теперь дочерний класс:
class FileDataSource(AbstractDataSource):
def __init__(self, filePath):
self._location = filePath
self._dataFrame = self.__readData()
super().__init__()
def __curateDataframe(self,dataFrame: pd.DataFrame):
dataFrame.columns = dataFrame.columns.str.replace(" ","")
dataFrame['Date'] = dataFrame[['Date', 'Time']].apply(lambda x: ' '.join(x), axis=1).apply(lambda x: pd.to_datetime(x))
dataFrame.set_index('Date')
return super(FileDataSource,self).__curateDataframe(dataFrame)
def __readData(self):
fileDir = os.path.dirname(os.path.realpath('__file__'))
filename = os.path.join(fileDir, self._location)
filename = os.path.abspath(os.path.realpath(filename))
df = pd.read_csv(filename, sep=',',parse_dates=True)
return df
При вызове из точки входа в программу
df = ds.FileDataSource('file.csv').Data()
Мой ожидаемый результат - метод Data
для вызова ребенка FileDataSource
метод __curateDataframe
Теперь мой вопрос: почему этого не происходит и как я могу это сделать?
PS Я из мира C ++ / C # и до сих пор не очень хорошо знаю, как работает наследование