我上了一堂课:
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语句或等效的开关)
哦,我知道在这种情况下我可以使用字典而不是类,但这不是我要搜索的内容......
答案 0 :(得分:1)
您的问题非常广泛,您可能最好不要在polymorphism和super
函数(没有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