调用python3基类中抽象方法的具体实现

2024-09-28 22:48:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我对使用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()

下面是一个具体实现的精简版本。在

^{pr2}$

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

resampler = SpecificDataResampler(db)
resampler.get_resampled_data()

有没有可能完成我在Python3中要做的事情?一、 子类调用在抽象基类中实现的方法,而该方法使用子类重写的方法?在

我很抱歉,如果这是一个重复,或有一个简单的工作错误。我在网上尝试了很多建议,但都没有奏效(我认为很多都是针对python2.7的)。在

注意:这是事物的简化版本。SpecificDataResampler实际上是一个单例,位于this pattern之后,因此SpecificDataResampler实际上是一个嵌套的内部类。然而,我在没有使用singleton模式的情况下对此进行了测试,并收到了相同的错误。在


Tags: 方法代码self版本datagetdef基类