Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:getattr至少需要2个参数,得到1个_Python_Getattr - Fatal编程技术网

Python: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

我有一个初学者的问题。我想从实例中获取属性。当我将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 #
类测试:
定义初始化(自):
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()
可用于使用动态属性名称实现属性访问。当您事先不知道属性名称时,可以使用它

当您在代码中使用us
inst.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^^^。我知道我错在哪里。谢谢你的帮助!非常感谢你的帮助。我更了解谁在工作。