获取 Python 中的所有对象属性?[重复]
- 2025-03-18 08:54:00
- admin 原创
- 72
问题描述:
有没有办法获取Python 中对象的所有属性/方法/字段/等等?
vars()
接近我想要的,但是除非对象具有 ,否则它不起作用,但这并不总是正确的(例如,对于 a , a等来说,它不正确)。__dict__
`list`dict
解决方案 1:
使用内置函数dir()
。
解决方案 2:
我使用__dict__
和dir(<instance>)
例子:
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']
解决方案 3:
你可能想要的是dir()
。
问题是类能够重写特殊__dir__
方法,这会导致dir()
返回类想要的任何内容(尽管鼓励它们返回准确的列表,但这并不是强制的)。此外,一些对象可以通过重写来实现动态属性__getattr__
,可能是 RPC 代理对象,也可能是 C 扩展类的实例。如果您的对象是这些示例之一,它们可能没有__dict__
或无法通过提供全面的属性列表:其中许多对象可能具有如此多的动态属性,以至于在您尝试访问它之前__dir__
它实际上并不知道它具有什么。
从短期来看,如果dir()
还不够,您可以编写一个函数,遍历__dict__
某个对象,然后__dict__
遍历 中的所有类obj.__class__.__mro__
;尽管这只适用于普通的 Python 对象。从长远来看,您可能必须使用鸭子类型 + 假设 - 如果它看起来像一只鸭子,那就祈祷它有.feathers
。
解决方案 4:
您可以使用dir(your_object)
获取属性并getattr(your_object, your_object_attr)
获取值
用法 :
for att in dir(your_object):
print (att, getattr(your_object,att))
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD