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与类参数相同!

  • 相关阅读:
    js类型转换 枫
    AspNetPager操作示例1 枫
    discuz资料 枫
    Request.params的知识 枫
    C#实现自动锁屏+关屏 枫
    iis访问aspx文件显示404无法找到文件? 枫
    filter:alpha(opacity=100,style=1) 枫
    IIS安装程序无法复制文件的问题(转载) 枫
    DataTable 枫
    windows系统函数详解(控制面板等常用函数) 枫
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/12752293.html
Copyright © 2011-2022 走看看