在Python中,我填充了一个对象,用于对本地计算机上的rsyslog相关的配置,环境和其他方面进行建模(RHEL 6.4 Python 2.6.4)我循环遍历rsyslog守护程序的许多实例(this_instance_number),以及许多配置文件中定义的属性(属性)。
使用这些值我填充对象。
给出以下变量:
this_instance_number=5
attribute="startupscript"
以下代码行,
print ('rsyslog.instance%(instance_number)s.%(attribute)s' %\
{"instance_number": this_instance_number, "attribute": attribute})
将打印此文:
rsyslog.instance5.startupscript
如何根据该格式字符串分配文本引用的属性?
例如,如果硬编码,我会指定:
rsyslog.instance5.startupscript="/etc/init.d/sample"
但是,我想给它分配这样的东西:
('rsyslog.instance%(instance_number)s.%(attribute)s' %\
{"instance_number": this_instance_number, "attribute": attribute}) = variable
答案 0 :(得分:2)
您可以使用getattr()
动态检索属性:
instance = getattr(rsyslog, 'instance{}'.format(this_instance_number))
print getattr(instance, attribute)
分配和setattr()
:
instance = getattr(rsyslog, 'instance{}'.format(this_instance_number))
setattr(instance, attribute, variable)
或者,对于任意深度的更通用的方法:
def get_deep_attr(obj, *path):
return reduce(getattr, path, obj)
def set_deep_attr(obj, value, *path)
setattr(get_deep_attr(obj, path[:-1]), path[-1], value)
print get_deep_attr(rsyslog, 'instance{}'.format(this_instance_number), attribute)
set_deep_attr(rsyslog, variable, 'instance{}'.format(this_instance_number), attribute)