python получает только атрибут класса без суперклассов

Так возможно ли получить словарь / список атрибутов ТОЛЬКО для самого конкретного класса? До сих пор я использую

for attr, value in obj.__class__.__dict__.iteritems(): 

Но это также даст мне определения, определенные в суперклассах. Есть ли способ избежать этого?

3 Solutions collect form web for “python получает только атрибут класса без суперклассов”

Выдержка из документации на python

Класс имеет пространство имен, реализуемое объектом словаря. Ссылки на атрибуты класса переводится в поисковые запросы в этом словаре, например, Cx переводится на C .__ dict __ ["x"] (хотя для классов нового стиля, в частности, имеется несколько крючков, которые позволяют использовать другие способы определения атрибутов). Когда имя атрибута не найдено там, поиск атрибутов продолжается в базовых классах

Другими словами, __dict__ содержит только «локальные» атрибуты класса, атрибуты суперкласса хранятся в суперклассе __dict__.

Таким образом, вы можете использовать __class__.__dict__.iteritems() для извлечения только атрибутов класса.

Он не показывает мне атрибуты суперкласса:

 >>> class A(object): def a(self): print a b = 3 >>> a = A() >>> dir(a) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b'] >>> list(a.__class__.__dict__) ['a', '__module__', 'b', '__dict__', '__weakref__', '__doc__'] 

__module__ , __dict__ , __weakref__ , __doc__ кажутся атрибутами, созданными для каждого класса по умолчанию.

Этот список атрибутов по умолчанию отличается для классов старого стиля:

 >>> class B: pass >>> list(B().__class__.__dict__) ['__module__', '__doc__'] 

Если вы хотите получить атрибут всех атрибутов класса и их значений, включая унаследованные классы, то вы можете использовать следующий код:

 cls_dict = { attr: getattr(obj.__class__, attr) for attr in dir(obj.__class__) } for attr, val in cls_dict.iteritems(): logging.info("%s = %s", attr, val) 
  • Датстор данных для приложения Google, дата на сегодняшний день на Python?
  • добавление шума к сигналу в python
  • Библиотека для создания URL-адресов в Python
  • Как проходить через файлы в каталоге?
  • Как правильно использовать ndb KeyProperty в этой ситуации?
  • python: SyntaxError: EOL при сканировании строкового литерала
  • Удалите несколько элементов из списка Python всего за одно утверждение
  • Исходный аргумент ключевого слова PluginManager
  • GAE: код python для проверки, находится ли я на dev_appserver или развернут в appspot
  • Подсчет записей в списке Python
  • Перевертывание изображения по вертикальной оси в питоне
  • Python - лучший язык программирования в мире.