Python-如何从给定字符串调用实例?

Python-如何从给定字符串调用实例?,python,string,function,instance,getattr,Python,String,Function,Instance,Getattr,我想从实例foo调用函数bar(),如下所示: foo.bar() 但实例名和函数名都来自给定的字符串。我尝试了getattr,但它只允许我对函数使用字符串,而不是实例: strbar = 'bar' getattr(foo, strbar)() 我想做的是: strfoo = 'foo' strbar = 'bar' getattr(strfoo, strbar)() 但它给了我: AttributeError:“str”对象没有属性“bar” 我知道字典可能是一种选择,但这让我

我想从实例foo调用函数bar(),如下所示:

foo.bar()
但实例名和函数名都来自给定的字符串。我尝试了getattr,但它只允许我对函数使用字符串,而不是实例:

strbar = 'bar'    
getattr(foo, strbar)()
我想做的是:

strfoo = 'foo'
strbar = 'bar'
getattr(strfoo, strbar)()
但它给了我:

AttributeError:“str”对象没有属性“bar”


我知道字典可能是一种选择,但这让我写了一本很长的字典。

最好的办法是有一本字典或类似的结构。 然而,你可以使用
eval
,这是邪恶的。或者,您可以从
locals()
字典中获取实例:

getattr(locals()[instance_name], attribute_name)

我会考虑重新设计你的代码。必须有一个更好的解决方案作为评估或本地。。。像字典一样……

最好的办法是有一本字典或类似的结构。 然而,你可以使用
eval
,这是邪恶的。或者,您可以从
locals()
字典中获取实例:

getattr(locals()[instance_name], attribute_name)

我会考虑重新设计你的代码。必须有一个更好的解决方案作为评估或本地。。。就像一本字典……

是的,
eval()
如果你不注意字符串的来源以及谁可以控制它的内容,那么它可能会非常危险。我很困惑用户在这里想做什么?有人能提供另一个用不同的方法处理代码的例子吗?没有得到第一个,但对于不同的方法,我们,或者至少我,需要更多关于他试图做什么的信息。使用
locals
字典正是我需要的。但我在很多地方都读到,使用它是危险的。你能解释一下为什么吗?尤其是给它写信会很危险,而且不可靠。但是,从中读取被认为是不好的做法,因为您可以只读取本地范围内的任何内容,而不仅仅是您想要读取的值……是的,
eval()
如果您不小心从何处获取该字符串以及谁可以控制其内容,则可能非常危险。我对用户在这里尝试做什么感到困惑?有人能提供另一个用不同的方法处理代码的例子吗?没有得到第一个,但对于不同的方法,我们,或者至少我,需要更多关于他试图做什么的信息。使用
locals
字典正是我需要的。但我在很多地方都读到,使用它是危险的。你能解释一下为什么吗?尤其是给它写信会很危险,而且不可靠。然而,从中读取被认为是不好的做法,因为您可以读取本地范围内的任何内容,而不仅仅是您想要读取的值。。。