使用setattr的背景
外部需要引用的方法functionA 传入的参数对象是argparse.parse_args()解析后的参数对象,该对象类型是其自定义的Namspace对象,是class 对象类型,所以如果想单独调用functionA就需要通过setattr构造参数对象
argparse中Namespace的对象的定义
class Namespace():
"""Simple object for storing attributes.
Implements equality by attribute names and values, and provides a simple
string representation.
"""
def __init__(self, **kwargs):
for name in kwargs:
setattr(self, name, kwargs[name])
调用及输出
namespace = Namespace(arg1='hello',arg2='hi')
print(namespace,namespace.arg1,namespace.arg2)
# 输出
<__main__.Namespace object at 0x7f774e5cbe10> hello hi
构造具备自定义属性的对象
# 和通过class定义一样
MyNamespace = type("MyNamespace", (object,), dict())
myNamespace = MyNamespace()
# 添加自定义属性
setattr(myNamespace,"arg1", "hello")
# 读取对象属性的方法有两种
value=getattr(myNamespace, "arg1") #方法1
print(myNamespace,myNamespace.arg1,value) # 方法2:myNamespace.arg1
# 输出
<__main__.MyNamespace object at 0x7ff3e2d1aeb8> hello hello