快速将argparse的参数倒入到类中的__dict__

话说好久没有写博客了,是时候写起来了!

argparse的参数在使用parse_args()后保存在了Namespace()中了,我们可以通过vars()来将其中的属性以键值对的字典形式返回

如下所示:

import argparse

args = argparse.Namespace()
args.arg1 = 1
args.arg2 = ['d']
args.arg3 = {'e':6}
print(args)
print(vars(args))

结果如下:

#Namespace(arg1=1, arg2=['d'], arg3={'e': 6})
#{'arg1': 1, 'arg2': ['d'], 'arg3': {'e': 6}}

如果参数多的时候,我们可以考虑将这些参数一次性都导入到一个类的__dict__属性中,如下所示:

class Args():
    def __init__(self):
        self.__dict__.update(vars(args))
        print(self.__dict__)

#实例化类
args = Args()
#打印的输出
{'arg1': 1, 'arg2': ['d'], 'arg3': {'e': 6}}

这个时候我们就需要了解一下这个__dict__属性了

class A:
    a = 1
    def __init__(self):
        self.a = 2

#查看该class的__dict__和实例的__dict__

a_class = A()
print(a_class.__dict__)
print(A.__dict__)

结果如下:

#实例的dict
{'a': 2}
#类的__dict__
{'__module__': '__main__', 'a': 1, '__init__': , '__dict__': , '__weakref__': , '__doc__': None}

可以看到实例的dict中用的是self.a,而类的属性里面的a的值是1,这也说明了__init__()是在实例化的时候执行的,在执行的时候,a的值变成了2。

综上,我们可以通过一次性将args倒入到类中的__dict__属性中来实现快速添加参数的方式。

你可能感兴趣的:(Python)