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

  • 相关阅读:
    Spring RestTemplate详解(转载)
    单点登录之CAS原理和实现(转载)
    Redis集群的原理和搭建(转载)
    50道Kafka面试题和解析(转载)
    阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别(转载)
    定期喝鸡汤
    Cassandra的架构
    Cassandra的数据模型
    Summary of OAuth 2.0
    林森
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/12752293.html
Copyright © 2020-2023  润新知