Python:getattr至少需要2个参数,得到1个
我有一个初学者的问题。我想从实例中获取属性。当我将getattr与两个单独的参数(对象和属性名称)一起使用时,它可以正常工作 但是我读到可以只使用一个参数(比如:obj.attr)。当我尝试它时,我得到一个错误:getattr至少需要2个参数,得到1个。为什么它不起作用Python:getattr至少需要2个参数,得到1个,python,getattr,Python,Getattr,我有一个初学者的问题。我想从实例中获取属性。当我将getattr与两个单独的参数(对象和属性名称)一起使用时,它可以正常工作 但是我读到可以只使用一个参数(比如:obj.attr)。当我尝试它时,我得到一个错误:getattr至少需要2个参数,得到1个。为什么它不起作用 class test : def __init__ (self) : self.name = "a" inst = test() print getattr (inst, "name") print
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 #
类测试:
定义初始化(自):
self.name=“a”
inst=测试()
打印getattr(inst,“name”)
打印getattr(inst.name)
A.
#错误:getattr至少需要2个参数,得到1个
#回溯(最近一次呼叫最后一次):
#文件“”,第8行,在
#TypeError:getattr至少需要2个参数,得到1个#
它不起作用,因为getattr至少需要2个参数
此外,您还可以不使用getattr
直接获取属性:
>>> inst.name
'a'
因此,无需使用getattr
getattr(对象,名称[,默认值])
返回对象的命名属性的值。名称必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x,'foobar')
相当于x.foobar
。如果命名属性不存在,则返回默认值(如果提供),否则引发
getattr()
可用于使用动态属性名称实现属性访问。当您事先不知道属性名称时,可以使用它
当您在代码中使用usinst.name
时,您预先知道属性名称;您刚刚输入了它,因此Python知道您正试图在这里使用属性名name
。Python可以解析该表达式,当代码运行时,在inst
引用的对象上查找属性name
,并生成一个值
但是如果您想使用包含属性名称的变量,那么使用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'
…因为getattr(inst.name)
只传递一个参数,而不是两个?你希望得到'a'
的什么属性?但是如果inst.name只等于一个参数,为什么在这个网站()的getattr部分有这样一句话:“getattr(x,'foobar')相当于x.foobar”?因为它是getattr(inst,'name')
相当于inst.name
,但请注意,这与getattr(inst.name)
不同(这没有意义;您已经在访问该属性,希望得到什么?)ok^^^。我知道我错在哪里。谢谢你的帮助!非常感谢你的帮助。我更了解谁在工作。