我正在使用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
在这个问题中具有内在混淆性质,我感到很抱歉。
答案 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')