Python:getattr预计至少有2个参数,得到1

时间:2015-04-17 12:39:00

标签: python getattr

我有一个初学者问题。我想从一个实例中获取一个属性。当我使用带有2个separeted参数的getattr(对象和属性的名称)时,它工作正常。

但我读到可以只使用一个参数(如:obj.attr)。当我尝试它时,我得到一个错误:getattr预计至少有2个参数,得到1.为什么它不起作用?

class test :
    def __init__ (self) :
        self.name = "a"

inst = test()

print getattr (inst, "name")
print getattr (inst.name)

a
# Error: getattr expected at least 2 arguments, got 1
# Traceback (most recent call last):
#   File "<maya console>", line 8, in <module>
# TypeError: getattr expected at least 2 arguments, got 1 #

2 个答案:

答案 0 :(得分:2)

getattr()可用于使用动态属性名称实现属性访问。如果您不知道属性名称​​预先,则使用它。

当您在代码中使用inst.name时,您事先知道属性名称;你刚输入它,所以Python知道你在这里尝试使用属性名name。 Python可以解析该表达式,当代码运行时,会在name引用的对象上查找属性inst,并且可以生成一个值。

但是如果你想使用一个变量,包含属性的名称,那么使用getattr()是有道理的:

attribute_name = 'name'
attribute_value = getattr(inst, attribute_name)

此处getattr()获取要查找属性的对象,以及表示要为您获取的属性的字符串。

你的错误在于你没有提供第二个参数。你给它一个对象作为第一个参数(inst.name,在这种情况下是一个值为'a'的字符串对象),但不是第二个参数。我怀疑你想在字符串'a'上查找属性。你想要'a' 本身,你已经拥有了,所以你可以完全删除getattr()函数调用:

getattr(inst, 'name')  # returns 'a'
inst.name              # also returns 'a'

答案 1 :(得分:0)

它不起作用,因为getattr expected at least 2 arguments

您也可以在没有getattr的情况下获取您的属性:

>>> inst.name
'a'

因此无需使用getattr

  

getattr(对象,名称[,默认])

     

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