从字符串创建对象,是否可能?

时间:2017-03-03 15:10:16

标签: python

是否可以执行以下操作

这有效

usethismodule.LoginUsername="my value"
usethismodule.LoginPassword="another value"

但是在代码运行之前我不知道对象的第二部分,我想我想要的是这个

listofthings=[]
listofthings.append('usethismodule.LoginUsername')
listofthings.append('usethismodule.LoginPassword')

for value in listofthings:
    value="A value I set"

这与上述结果相同。这有意义吗?

2 个答案:

答案 0 :(得分:2)

事实上,setattr和字典可以解决这个问题。

dictofthings = {
    'usethismodule.LoginUsername': 'my value',
    'usethismodule.LoginPassword': 'my other value'
}

for k in dictofthings:
    setattr(eval(k.split('.')[0]), k.split('.')[1], dictofthings[k])

希望这有帮助!

答案 1 :(得分:0)

你一直在说usethismodule.<something>。所以,让我们假装你是对的。

Python在dict中维护了sys.modules当前导入的模块。您可以按名称查找模块,并获取&#34;对象&#34;。 (实际上是一个module对象。)

如果您手头有对象,则可以对其中一个属性进行硬编码,也可以对其使用getattrsetattr

import sys

module_name = "usethismodule"   # I don't know where this come from.

utm = sys.modules[module_name]

utm.LoginUsername = "xyzzy"
utm.LoginPassword = "secret123"

# or

pw_attr_name = "passWord"       # Maybe you read this from a config file?
setattr(utm, pw_attr_name, "secret123")
相关问题