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

Python 从字符串创建对象,是否可能?,python,Python,是否可以执行以下操作 这很有效 usethismodule.LoginUsername="my value" usethismodule.LoginPassword="another value" 但是在代码运行之前我不知道对象的第二部分,我想我想要的是这个 listofthings=[] listofthings.append('usethismodule.LoginUsername') listofthings.append('usethismodule.LoginPassword')

是否可以执行以下操作

这很有效

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"
这将产生与上述相同的结果。这有意义吗?

的确,一本字典就可以做到这一点

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

for k in dictofthings:
    setattr(eval(k.split('.')[0]), k.split('.')[1], dictofthings[k])
希望这有帮助

的确如此,一本字典就可以做到这一点

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

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

希望这有帮助

您一直说
使用此模块。
。让我们假装你是对的

Python在
sys.modules
中维护当前导入模块的
dict
。您可以按名称查找模块,并获得一个“对象”。(实际上是一个
模块
对象。)

如果您手头有一个对象,您可以硬编码对其属性之一的访问,或者对其使用
getattr
setattr

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")

你一直说
使用这个模块。
。让我们假装你是对的

Python在
sys.modules
中维护当前导入模块的
dict
。您可以按名称查找模块,并获得一个“对象”。(实际上是一个
模块
对象。)

如果您手头有一个对象,您可以硬编码对其属性之一的访问,或者对其使用
getattr
setattr

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")

您可能需要
setattr
,例如,
setattr(使用此模块,'LoginUsename',“我的值”)
的可能副本。简短回答:使用dict。您可能需要
setattr
,例如,
setattr(使用此模块,'LoginUsename','my value')
的可能副本。简短回答:使用dict。但是模块名称也是数据的一部分。你让它成为代码的一部分。好的,改变了。请注意,eval可能是一个安全漏洞,但是
ast.literal\u eval
不起作用。这更好吗?我会说这更好,因为这是他们显然想要的,但更糟糕的是,因为评估安全问题:-)。也许你的答案和Austin的答案(假设只有一个模块名)混合在一起是最好的。但是模块名也是数据的一部分。你让它成为代码的一部分。好的,改变了。请注意,eval可能是一个安全漏洞,但是
ast.literal\u eval
不起作用。这更好吗?我会说这更好,因为这是他们显然想要的,但更糟糕的是,因为评估安全问题:-)。也许你的答案和奥斯汀的答案(假设只有一个模块名)的混合会是最好的。