zoukankan      html  css  js  c++  java
  • 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与类参数相同!

  • 相关阅读:
    黑客防线
    基于onvif的码流转换专利
    8168开发之---1g内存换成512M的内存映射配置
    图像处理之基础---内积、点积
    3s 简介
    嵌入式开发之工具---比开发手册更重要的一个命令 man page
    图像处理之基础---频域分析
    lbp纹理特征
    28.Docker介绍与目录
    09.客户端集成IdentityServer
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/12752293.html
Copyright © 2011-2022 走看看