我刚开始使用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实际上是嵌套的内部类。然而,我没有使用单例模式测试它,并收到相同的错误。