Как перечислить свойства объекта в Python?

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

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

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

Ответ 1

for property, value in vars(theObject).iteritems():
    print property, ": ", value

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

Ответ 2

См. 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']
>>> 

Ответ 4

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

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

Ответ 5

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

print vars(theObject)

Ответ 6

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

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

my_dict.keys()

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