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
不起作用。这更好吗?我会说这更好,因为这是他们显然想要的,但更糟糕的是,因为评估安全问题:-)。也许你的答案和奥斯汀的答案(假设只有一个模块名)的混合会是最好的。