在继承的类中执行父方法

时间:2018-08-10 13:14:39

标签: python inheritance

我有一个抽象类Reader,它定义了一个reader方法,该方法将实现每个继承的类。我想做的是在_is_valid方法的每个实现的开始处执行reader方法,但是我不想不必在每个类中重复代码或使用装饰器。

import os

from abc import ABCMeta, abstractmethod

import pandas as pd


class Reader(ABCMeta):

    @abstractmethod
    def read(cls, f):
        raise NotImplementedError

    @staticmethod
    def _valid(f):
        return os.path.exists(f)


class CSVReader(Reader):
    def read(self, f):
        if not self._valid(f):
            return None
        else:
            return pd.read_csv(f).values


class XLSReader(Reader):
    def read(self, f):
        pass


class SHPReader(Reader):
    def read(self, f):
        pass

任何想法都可以解决的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

您的Reader类可以具有一个公共方法read,该方法定义先调用_valid然后调用_read

from abc import ABC, abstractmethod

class Reader(ABC):  # Or metaclass=ABCMeta
    def read(self, f):
        if not self._valid(f):
            raise ValueError("Invalid")
        else:
            return self._read(f)
    @abstractmethod
    def _read(self, f)
        raise NotImplementedError
    @classmethod
    def _valid(cls, f)  # Subclasses can have more restrictive validations
        return os.path.exists(f)