当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中枚举对象的属性?

如何解决《如何在Python中枚举对象的属性?》经验,为你挑选了6个好方法。

IC#我们通过反思来做到这一点.在Javascript中它很简单:

for(var propertyName in objectName)
    var currentPropertyValue = objectName[propertyName];

怎么用Python做?



1> Georg Schöll..:
for property, value in vars(theObject).iteritems():
    print property, ": ", value

请注意,在一些罕见的情况下,有一个__slots__属性,这类通常没有__dict__.


请改用setattr().
@Hugo:首先是因为它是"pythonic",换句话说,这是大多数社区期望看到的语法.另一种语法可能会不必要地让任何读取代码的人暂停.其次,一些类型实现了一个setter`__setattr __()`.直接在字典上设置值会绕过对象的setter(和/或其父项).它在Python里是相当常见的比满足眼睛更加事情()发生在属性设定(如卫生)期间的背景下,使用``的setattr确保您不会错过,或被迫明确地处理它们自己.

2> gimel..:

inspect.getmembers(object[, predicate]).

返回按名称排序的(名称,值)对列表中对象的所有成员.如果提供了可选的谓词参数,则仅包含谓词返回true值的成员.

>>> [name for name,thing in inspect.getmembers([])]
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', 
'__delslice__',    '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', 
'__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', 
'__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__','__reduce_ex__', 
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', 
'__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 
'insert', 'pop', 'remove', 'reverse', 'sort']
>>> 


@nikow:inspect.getmembers()保证即使内部细节发生变化也能继续工作.
@NicholasKnight`inspection.getmembers()`包装`dir()`用**(A)**的(大多数可以忽略的)附带好处,包括[动态类属性](https://docs.python.org/3/ library/types.html#types.DynamicClassAttribute)和[metaclass attributes](http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python)和**(B)**不包括成员_not_匹配传递的谓词._Yawn,对吗?_` inspect.getmembers()`适用于通常支持所有可能对象类型的第三方库.但是,对于标准用例,`dir()`绝对足够.

3> EBGreen..:

dir()是简单的方法.看这里:

Python内省指南



4> Nelson..:

__dict__对象的属性是其所有其他已定义属性的字典.请注意,Python类可以覆盖getattr 并使其看起来像属性但不在其中__dict__.还有内置函数vars(),dir()它们以微妙的方式不同.并且__slots__可以替换__dict__一些不寻常的类.

Python中的对象很复杂.__dict__是反思式编程的正确起点.dir()如果你在一个交互式shell中乱砍,那就是开始的地方.



5> Nicolas Rojo..:

georg scholly较短的版本

print vars(theObject)



6> MrE..:

如果您正在寻找所有属性的反映,上面的答案都很棒.

如果您只是想获取对象的键,请使用

my_dict.keys()

my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' }
my_dict.keys() 
> ['abc', 'def', 'ghi']

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有