Как перечислить свойства объекта в Python? - PullRequest
108 голосов
/ 09 августа 2009

Я C # мы делаем это через отражение. В Javascript это просто как:

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

Как это сделать в Python?

Ответы [ 6 ]

126 голосов
/ 09 августа 2009
for property, value in vars(theObject).iteritems():
    print property, ": ", value

Имейте в виду, что в некоторых редких случаях есть свойство __slots__, такие классы часто не имеют __dict__.

64 голосов
/ 09 августа 2009

См. inspect.getmembers(object[, predicate]).

Возвращает все члены объекта в списке пар (имя, значение), отсортированных по имени. Если указан необязательный аргумент предиката, включаются только члены, для которых предикат возвращает истинное значение.

>>> [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']
>>> 
51 голосов
/ 09 августа 2009

dir() - это простой способ. Смотрите здесь:

Руководство по самоанализу Python

12 голосов
/ 09 августа 2009

Свойство __dict__ объекта - это словарь всех его других определенных свойств. Обратите внимание, что классы Python могут переопределять getattr и делать вещи, которые похожи на свойства, но не в __dict__. Также есть встроенные функции vars() и dir(), которые отличаются тонким способом. И __slots__ может заменить __dict__ в некоторых необычных классах.

Объекты сложные в Python. __dict__ - правильное место для программирования в стиле отражения. dir() - это то место, с которого стоит начать, если вы взламываете интерактивную оболочку.

11 голосов
/ 10 июня 2013

Георг учебно более короткая версия

print vars(theObject)
10 голосов
/ 24 января 2017

Если вы ищете отражение всех свойств, ответы выше отличные.

Если вы просто хотите получить ключи от объекта, используйте

my_dict.keys()

my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' }
my_dict.keys() 
> ['abc', 'def', 'ghi']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...