Проверка Python: получить только методы, определенные в дочернем классе [duplicate]

2
задан phihag 30 August 2011 в 11:04
поделиться

3 ответа

Извлечь из документации python

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

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

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

3
ответ дан Cédric Julien 28 August 2018 в 06:37
поделиться

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

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)
1
ответ дан Alek Kowalczyk 28 August 2018 в 06:37
поделиться

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

>>> 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__']
1
ответ дан Roman Bodnarchuk 28 August 2018 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: