之前一直困惑于python类在继承中冗长的参数,经过研究airflow的代码,发现是可以进行优化的.
Father类有两个必选参数src/dst,和一个默认参数concurrency,
子类有两个必选参数target_db, target_tb,在子类的初始化方法__init__中只需要有target_db, target_tb的签名,其他参数都可以用*args, **kwargs替代
在实际的子类实例化的时候,则需要将子类/父类所有必须参数都初始化,但毕竟子类的初始化方法简化了很多
class Father(object): def __init__(self, src, dst, concurrency=1, *args, **kwargs): self.src = src self.dst = dst self.concurrency = concurrency self.json_dict = None def print_obj(self): print(self.__dict__) class Son(Father): def __init__(self, target_db, target_tb, *args, **kwargs): super().__init__(*args, **kwargs) self.target_db = target_db self.target_tb = target_tb if __name__ == '__main__': t = Son(src='src', dst='dst', target_db='odoo', target_tb='product') t.print_obj()