2016-03-03 155 views
0

我有以下代码:继承,然后覆盖父初始化

# 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' 

我在做什么错,我该如何解决这个问题?

回答

1

您需要显式调用父类的构造函数。根据您的object继承我猜你使用Python 2,所以试试这个:

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

如果你实际上是使用Python 3,你可以只使用super().__init__()

1

就我所见,您完全覆盖__init__。只需在您继承的__init__中调用super().__init__()(以便父代的init将运行)并检查错误是否仍然存在。

或者如果您使用的是Python 2,则需要修复超级调用的类:super(RTUpdater, self).__init__()