在Python中,如何通过变量名称的字符串表示来获取变量?

时间:2014-08-01 20:16:40

标签: python string class self hasattr

我正在使用Python 2.7。

例如,使用以下代码:

class Apple:
    def __init__(self, n):
        self.n = n
    def printVariable(self, s): # print variable named s
        if hasattr(self, s):
            print ...

我将...替换为打印self.'s'。例如,如果我拨打printVariable('n'),我会用什么代替...打印n

当然,self.s不起作用,因为首先没有属性self.s,但更重要的是,它打印的是另一个变量,而不是变量self.'s'我想打印名称由传递给方法的字符串s表示的变量。

对于self.s以及self.'s's在这个问题中具有内在混淆性质,我感到很抱歉。

2 个答案:

答案 0 :(得分:2)

如果hasattr(self,s)足以满足您的需求,那么您需要getattr()

if hasattr(self, s):
    print getattr(self, s)

事实上,根据您的具体要求,您可以完全跳过hasattr。如果缺少该属性,getattr()将返回默认值:

print gettattr(self, s, 'No such attribute: '+s)

如果要查找当前对象之外的变量(例如,在本地范围或全局范围内,或在另一个对象中),请尝试以下方法之一:

locals()[s]
globals()[s]
getattr(other_object, s)

注意:使用locals()globals(),在较小程度上,hasattr(self,s),在少数有限的情况之外,是code smell。这很可能意味着您的设计存在缺陷。

答案 1 :(得分:1)

我认为这就是你所追求的,但并不完全确定......

print getattr(self, s)

如果不存在,您还可以使用它来指定要返回的内容。请参阅getattr docs

print getattr(self, s, 'default value')