0

我正在使用 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 ...

我会用什么来代替...print self.'s'。例如,如果我打电话printVariable('n'),我会用什么代替...print n

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

对于这个问题中self.sself.'s'的本质上令人困惑的性质,我感到很抱歉。s

4

2 回答 2

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)

于 2014-08-01T20:18:18.573 回答
1

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

print getattr(self, s)

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

print getattr(self, s, 'default value')
于 2014-08-01T20:18:28.853 回答