继承然后重写父ini

2024-04-23 23:16:02 发布

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

我有以下代码:

# file1.py
class GenericScript(object):

    def __init__(self):

        self.start_time = time.time()
        self.date_stem = str(timezone.now().date()).replace('-','')
        self.script_name = os.path.basename(sys.argv[0]).replace('.py','')
        self.file_name = None
        self.log_file = None
        self.integrity_field = '%s+%s' % (self.script_name, str(int(time.time())))


# file2.py
class RTUpdater(GenericScript):

    def __init__(self):

        self.integrity_field = '%s+%s' % (self.script_name, self.date_stem)
        self.update_title_data = False
        self.update_title_ranking = True
        self.update_title_box_office = True
        self.update_person_ranking = True

我要做的是调用RTUpdate(),让它先初始化父类中的所有项,然后用它自己的__init__方法添加到这些项中。但是,当我调用它时,self.integrity_field会不断引发错误,因为self.script_name没有定义,这意味着它没有首先继承父变量__init__。我是这样称呼它的:

if __name__ == '__main__':
    x = RTUpdater()
    main(x)

>>> AttributeError: 'RTUpdater' object has no attribute 'script_name'

我做错了什么?我该如何解决这个问题?你知道吗


Tags: namepyselftruefielddatetimetitle
2条回答

在我看来,你完全覆盖了__init__。只需在继承的__init__中调用super().__init__()(这样就可以运行父级的init),并检查错误是否仍然存在。你知道吗

或者,如果您使用的是python2,则需要修复超级调用的类:super(RTUpdater, self).__init__()。你知道吗

您需要显式地调用父类的构造函数。基于您对object的继承,我猜您使用的是Python 2,请尝试以下方法:

class RTUpdater(GenericScript):
    def __init__(self):
        super(RTUpdater, self).__init__()
        # ...

如果您实际使用的是python3,那么只需使用super().__init__()。你知道吗

相关问题 更多 >