[英]How to access python objects with a dynamic object name?
I have a question to one of my python scripts.我对我的一个 Python 脚本有疑问。 I'm using the library untangle ( https://github.com/stchris/untangle ) to import and convert xml config files into the main script.我正在使用库 untangle ( https://github.com/stchris/untangle ) 将 xml 配置文件导入并转换为主脚本。
The problem: I have user informations in the config file for more than one user and I'm using this information in a loop.问题:我在配置文件中有多个用户的用户信息,我循环使用这些信息。 It works very well, but it makes the script very ugly due to the name of the generated objects from the xml file.它工作得很好,但由于从 xml 文件生成的对象的名称,它使脚本非常难看。
Concrete this means I can't (or I just don't know how) change the name of the object I would like to use dynamic.具体这意味着我不能(或者我只是不知道如何)更改我想动态使用的对象的名称。
The example code is below:示例代码如下:
if employee == 0:
if str(configobj.config.modes.employee.employee_1.name.cdata) != '':
display.drawtext(0,0,str(configobj.config.modes.employee.employee_1.name.cdata),"7x13B",255,255,255,True)
if str(configobj.config.modes.employee.employee_1.line1.cdata) != '':
display.drawtext(int(configobj.config.modes.employee.employee_1.line1['x']),
int(configobj.config.modes.employee.employee_1.line1['y']),
if str(configobj.config.modes.employee.employee_1.line2.cdata) != '':
display.drawtext(int(configobj.config.modes.employee.employee_1.line2['x']),
int(configobj.config.modes.employee.employee_1.line2['y']),
if str(configobj.config.modes.employee.employee_1.line3.cdata) != '':
display.drawtext(int(configobj.config.modes.employee.employee_1.line3['x']),
int(configobj.config.modes.employee.employee_1.line3['y']))
displayimage = True
elif employee == 1:
if str(configobj.config.modes.employee.employee_2.name.cdata) != '':
display.drawtext(0,0,str(configobj.config.modes.employee.employee_2.name.cdata),"7x13B",255,255,255,True)
if str(configobj.config.modes.employee.employee_2.line1.cdata) != '':
display.drawtext(int(configobj.config.modes.employee.employee_2.line1['x']),
int(configobj.config.modes.employee.employee_2.line1['y']),
if str(configobj.config.modes.employee.employee_2.line2.cdata) != '':
display.drawtext(int(configobj.config.modes.employee.employee_2.line2['x']),
int(configobj.config.modes.employee.employee_2.line2['y']),
if str(configobj.config.modes.employee.employee_2.line3.cdata) != '':
display.drawtext(int(configobj.config.modes.employee.employee_2.line3['x']),
int(configobj.config.modes.employee.employee_2.line3['y']),
if str(configobj.config.modes.employee.employee_2.image.cdata) != '':
display.showimage(160,0,str(configobj.config.modes.employee.employee_2.image.cdata))
displayimage = True
And this is a lot of repeated code with a changing number.这是很多重复的代码,并且编号不断变化。 How can I improve this?我该如何改进?
getattr(configobj.config.modes.employee, 'employee_' + str(employee + 1)).name.cdata
You can also create separate variable for employee:您还可以为员工创建单独的变量:
employee = getattr(configobj.config.modes.employee, 'employee_' + str(employee + 1))
print(employee.name.cdata)
print(employee.line1['x'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.