python面向對象——類的參數


之前一直困惑於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()

 如果類參數較多,從一個字典來初始化的時候,可以進行簡化:

if __name__ == '__main__':
    print(sys.argv[1])
    args = transform_params(sys.argv[1])
    s=Son(**args)

需要保證字典中包含類的所有必選參數且字典參數key與類參數相同!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM