Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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中的所有对象属性?_Python_Introspection_Python 2.6 - Fatal编程技术网

获取Python中的所有对象属性?

获取Python中的所有对象属性?,python,introspection,python-2.6,Python,Introspection,Python 2.6,有没有办法在Python中获取对象的所有属性/方法/字段等 vars()与我想要的很接近,但除非对象具有\uu dict\uuu,否则它不起作用,而这并不总是正确的(例如,对于列表、dict等,它不是正确的)。使用内置函数。您可能需要的是 问题在于类能够重写特殊的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。此外,一些对象可能通过覆盖

有没有办法在Python中获取对象的所有属性/方法/字段等

vars()
与我想要的很接近,但除非对象具有
\uu dict\uuu
,否则它不起作用,而这并不总是正确的(例如,对于
列表、
dict
等,它不是正确的)。

使用内置函数。

您可能需要的是

问题在于类能够重写特殊的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。此外,一些对象可能通过覆盖
\uu getattr\uuu
实现动态属性,可能是RPC代理对象,也可能是C扩展类的实例。如果您的对象是这些示例中的一个,那么它们可能没有
\uuuuu dict\uuuuu
,或者无法通过
\uuuuuu dir\uuuuu
提供一个全面的属性列表:这些对象中的许多可能有太多的动态属性,直到您尝试访问它时才真正知道它有什么


在短期内,如果
dir()
不够,您可以为对象编写一个遍历
\uuuu dict\uuuu
的函数,然后为
obj中的所有类编写
\uu dict\uuuu
;尽管这只适用于普通python对象。从长远来看,你可能不得不使用鸭子打字+假设-如果它看起来像鸭子,交叉你的手指,希望它有
。羽毛
我使用
\uuu dict\uuuu
dir()

示例

class MyObj(object):
  def __init__(self):
    self.name = 'Chuck Norris'
    self.phone = '+6661'

obj = MyObj()
print(obj.__dict__)
print(dir(obj))

# Output:  
# obj.__dict__ --> {'phone': '+6661', 'name': 'Chuck Norris'}
#
# dir(obj)     --> ['__class__', '__delattr__', '__dict__', '__doc__',
#               '__format__', '__getattribute__', '__hash__', 
#               '__init__', '__module__', '__new__', '__reduce__', 
#               '__reduce_ex__', '__repr__', '__setattr__', 
#               '__sizeof__', '__str__', '__subclasshook__', 
#               '__weakref__', 'name', 'phone']
您可以使用
dir(您的\u对象)
获取属性,使用
getattr(您的\u对象,您的\u对象\u attr)
获取值

用法:

for att in dir(your_object):
    print (att, getattr(your_object,att))

请注意,
dir()
的行为经常被操纵以显示有趣的属性,而不是严格意义上的所有属性;例如,它不显示通过元类继承的属性,或者它可能会被
\uuuuu dir\uuuu
方法覆盖。@TokenMacGuy:这很适合我需要的。。。想得太多会让我头疼它也不显示内省属性,例如
func\u defaults
@mouad为什么通过>>dir(pyrenderdoc)IronPython.Runtime.List获得此属性?如果我想存储dir()返回的结果怎么办?不确定这是否是您要查找的,但是
attrs=dir(obj)
将属性数组作为字符串存储在
attrs
中。然后,要访问它们,您可以始终使用
getattr(obj,attrs[i])
获取
attrs
数组中的
i
th属性。
\uuuu dict\uuuu
这个函数对我帮助很大。OP特别提到他对没有
\uuu dict\uuuu
的情况感兴趣-否则他可以使用
vars
vars()接近我想要的,但除非一个对象有一个dict,否则它不起作用,而dict并不总是真的(例如,列表、dict等都不是真的)。他明确地说这不是他想要的谢谢,这是我在dir(obj)中为attr寻找很长时间的
:print(attr+“()”)if callable(getattr(obj,attr))else print(attr)
#将在任何可调用(函数、方法、类等)之后立即打印括号。顺便说一句,这种格式
print(f'{att}:{getattr:}(myobject,att)}\n')
可能会帮助您更好地阅读您的ouputattribs=lambda obj:[o for o in dir(obj)(如果不是的话)o.startswith('''')]对我来说很好。要获取
attrs
对象的属性,有以下选项。