Получить все атрибуты объекта в Python?



есть ли способ сделать все атрибуты / методы / поля / etc. объекта в Python?



vars() и закрыть к тому, что я хочу, но это не работает, если объект не имеет __dict__, которые не всегда верно (например, это не верно для list, a dict и т. д.).

517   3  

3 ответов:

используйте встроенную функцию dir().

что вы, вероятно, хотите-это dir().

загвоздка в том, что классы могут переопределить специальный __dir__ метод, который вызывает dir() чтобы вернуть все, что класс хочет (хотя им рекомендуется возвращать точный список, это не применяется). Кроме того, некоторые объекты могут реализовывать динамические атрибуты путем переопределения __getattr__, могут быть прокси-объекты RPC, или могут быть экземпляры классов C-extension. Если ваш объект является одним из этих примеров, они могут не имеют __dict__или быть в состоянии предоставить полный список атрибутов через __dir__: многие из этих объектов могут иметь так много динамических attrs он не будет на самом деле знать что он имеет, пока вы не попытаетесь получить к нему доступ.

в краткосрочной перспективе, если dir() недостаточно, вы можете написать функцию, которая проходит __dict__ для объекта __dict__ для всех классов в obj.__class__.__mro__, хотя это будет работать только для обычных объектов Python. В долгосрочной перспективе run, возможно, вам придется использовать duck typing + предположения - если это похоже на утку, скрестите пальцы и надейтесь, что у нее есть .feathers.

Я использую __dict__

пример:

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

obj = MyObj()
print(obj.__dict__)

# Output:  
# {'phone': '+6661', 'name': 'Chuck Norris'}

Comments

    Ничего не найдено.