在基类中调用抽象方法的具体实现,Python 3

时间:2017-08-23 17:55:43

标签: python python-3.x inheritance

我刚开始使用Python,我正在尝试实现一个我在C#中经常使用的结构。我需要读入并处理来自一堆不同表的数据。每个表都需要有少量代码,但大多数都可以重用。因此,我正在尝试创建一个抽象基类来处理大部分处理,并为特定于表的处理调用抽象方法。然后,我创建了为每个表实现这些函数的类的具体实现。不幸的是,基类中的共享方法是调用抽象方法,而不是子类中实现的方法。

这是抽象类的精简版。

from abc import ABC, abstractmethod, ABCMeta

class AbstractDataResampler(object):
    __metaclass__  = ABCMeta

    def __init__(self, database):
        self.client = database

        self.__configure_database()

    def __resample_data(self):
        raise NotImplementedError()

    def get_resampled_data(self):
        return __resample_data()

这是一个具体实现的简化版本。

from DataProcessors.AbstractDataResampler import AbstractDataResampler as Parent
class SpecificDataResampler(Parent)
    def __init__(self, database):
        super().__init__(database)

    def __resample_data(self):
        ... implementation

当我创建一个SpecificDataResampler实例并调用get_resampled_data()时,我得到一个NotImplementedException,因为正在调用__resample_data的基本版本,而不是已实现的子版本。

resampler = SpecificDataResampler(db)
resampler.get_resampled_data()

是否有可能完成我在Python 3中尝试做的事情?即一个子类调用抽象基类中实现的方法,然后使用子类重写的方法?

如果这是重复的话我很抱歉,或者工作中出现了一个简单的错误。我在网上尝试了很多建议,但没有一个有效(我认为很多都是针对Python 2.7)。

注意:这是事物的简化版本。 SpecificDataResampler实际上是this pattern之后的单例,因此SpecificDataResampler实际上是嵌套的内部类。然而,我没有使用单例模式测试它,并收到相同的错误。

0 个答案:

没有答案