Python MRO和通过super()传递kwargs

2024-09-28 05:34:28 发布

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

我在Ubuntu13.04上使用Python2.7。我正在构建一系列计划任务,以便将一些数据上传到第三方API。我试着用一种通用的方式来构建任务,这样我们以后可以很容易地添加更多的任务。在这样做的时候,我使用了一些继承技术,但这些技术并没有按照我预期的方式工作。我认为MRO是非常直接的,但是我一定是做错了什么,因为我在尝试初始化任务时得到了global name 'UpdateBase' is not defined。在

下面是我使用的继承结构。在

class UpdateBase(PeriodicTask):
    def __init__(self, table_type=None, update_type=constants.UPDATE_REALTIME,
                 cache_time=constants.CACHE_TIME_UPDATE):
        super(UpdateBase, self).__init__()
        self.table_type = table_type
        self.update_type = update_type
        self.cache_time = cache_time
        self.filename = '{}-{}.{}'.format(
            table_type, datetime.datetime.now(), self.update_type)
        self.old_files = '{}-*'.format(table_type)
        self.file_path = os.path.join(
            constants.UPDATE_FILE_PATH, self.filename)


class UpdateAffiliates(UpdateBase):
    def __init__(self, **kwargs):
        super(UpdateAffiliates, self).__init__(
            table_type=constants.AFFILIATES, **kwargs)


class OverlapAffiliates(UpdateAffiliates):
    def __init__(self, **kwargs):
        super(OverlapAffiliates, self).__init__(
            update_type=constants.UPDATE_OVERLAP,
            cache_time=constants.UPDATE_OVERLAP, **kwargs)

关于我为什么会出错有什么建议吗?在

编辑1:

似乎是其他原因造成了这个NameError。我已经建立了几个层次结构来测试这个MRO。我试过了所有我能想到的方法,一切都很好。如果有人能想到什么我可以检查,更改或包括帮助我将不胜感激。在

测试代码的一个示例:

^{pr2}$

Tags: selfcachetimeinitdeftypetableupdate
1条回答
网友
1楼 · 发布于 2024-09-28 05:34:28

我能够解决我的问题,不再使用__init__()方法进行初始化。相反,我使用了一个基setup_info()方法。我在基中引发一个NotImplementedError,只在每个子级中编写设置。没什么大不了的,但没那么优雅。:)

我还是想知道这个问题的根本原因是什么。我是从芹菜遗传的。没什么特别的。在

相关问题 更多 >

    热门问题