Python вызывает метод от родителя вместо ребенка - PullRequest
0 голосов
/ 09 декабря 2018

Учитывая базовый класс, который содержит абстрактный метод:

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 # и до сих пор не очень хорошо знаю, как работает наследование

...