Python:在类/不同的案例区分方法中使用eval()

时间:2015-11-22 14:38:34

标签: python eval

我上了一堂课:

class thing:
    def __init__(self, inp, inp2):
        self.aThing = inp
        self.bThing = inp2
    def test(self, character):
        print(self.eval(character+"Thing"))

(重要的是最后一行)

测试脚本如下所示:

x = thing(1, 2)
x.test("b")

试着跑这个,它尖叫着我:

AttributeError:'thing'对象没有属性'eval'

有道理,所以我尝试了这个:

print(self.(eval(character+"Thing")))

现在是语法错误:。(

那么有什么方法可以做到这一点?如果没有,是否有办法在不必列出所有可能的案例的情况下进行这种案例区分? (比如使用if语句或等效的开关)

哦,我知道在这种情况下我可以使用字典而不是类,但这不是我要搜索的内容......

1 个答案:

答案 0 :(得分:1)

您的问题非常广泛,您可能最好不要在polymorphismsuper函数(没有if的行为区别)或python design patterns上观看演讲。< / p>

对于您发布的具体问题,您要使用getattr

  

getattr(object, name[, default])

     

返回named的值   对象的属性。 name必须是一个字符串。如果字符串是名称   对象的一个​​属性,结果是该值的值   属性。例如,getattr(x, 'foobar')相当于   x.foobar。如果named属性不存在,则返回default   如果提供,则引发AttributeError

class thing:
    def __init__(self, inp, inp2):
        self.aThing = inp
        self.bThing = inp2
    def test(self, character):
        print(getattr(self,character+"Thing"))

示例演示

>>> t = thing(1, 2)
>>> t.test("a")
1