【问题标题】:Python - How to call an instance from a given string?Python - 如何从给定的字符串调用实例?
【发布时间】:2015-10-28 00:02:25
【问题描述】:

我想从实例 foo 调用函数 bar(),就像这样:

foo.bar()

但是实例名和函数名都来自给定的字符串。我试过 getattr 但它只是让我为函数使用字符串,而不是实例:

strbar = 'bar'    
getattr(foo, strbar)()

我想做的是这样的:

strfoo = 'foo'
strbar = 'bar'
getattr(strfoo, strbar)()

但它给了我:

AttributeError: 'str' 对象没有属性 'bar'

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

【问题讨论】:

    标签: python string function instance getattr


    【解决方案1】:

    最好的方法是使用字典或类似的结构。 但是你可以使用 eval 这是邪恶的。或者您可以从 locals() 字典中获取您的实例:

    getattr(locals()[instance_name], attribute_name)
    

    我会考虑重新设计您的代码。作为 eval 或 locals 必须有更好的解决方案......就像字典一样......

    【讨论】:

    • 是的,eval() 可能非常危险,如果您不注意从哪里获得该字符串以及谁可以控制其内容。
    • 我对用户在这里尝试做什么感到困惑?谁能提供另一个使用不同方法处理代码的示例?
    • 没有得到第一个,但对于不同的方法,我们,或者至少我,需要更多关于他想要做什么的信息..
    • 使用locals 字典正是我所需要的。但我在很多地方读到使用它是危险的。你能解释一下为什么吗?
    • 尤其是写入它可能非常危险且不可靠。但是,读取它被认为是不好的做法,因为您可以读取本地范围内的任何内容,而不仅仅是您想要的值...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2015-10-24
    • 2016-06-05
    • 2013-09-18
    • 2021-12-15
    相关资源
    最近更新 更多