Как получить доступ к свойствам суперклассов Python, например via __class __.__ dict __?

Как я могу получить все имена свойств класса python , включая те свойства, унаследованные от суперклассов ?

class A(object):
  def getX(self):
    return "X"
  x = property(getX)

a = A()
a.x
'X'

class B(A):
  y = 10

b = B()
b.x
'X'

a.__class__.__dict__.items()
[('__module__', '__main__'), ('getX', <function getX at 0xf05500>), ('__dict__', <attribute '__dict__' of 'A' objects>), ('x', <property object at 0x114bba8>), ('__weakref__', <attribute '__weakref__' of 'A' objects>), ('__doc__', None)]
b.__class__.__dict__.items()
[('y', 10), ('__module__', '__main__'), ('__doc__', None)]

Как я могу получить доступ к свойствам a через b? Потребность: «Дайте мне список всех имен свойств из b, включая унаследованные от a!»

>>> [q for q in a.__class__.__dict__.items() if type(q[1]) == property]
[('x', <property object at 0x114bba8>)]
>>> [q for q in b.__class__.__dict__.items() if type(q[1]) == property]
[]

Я хочу получить результаты из первого (a) при работе со вторым (b), но только текущий может получить пустой список. Это также должно работать для другого C, унаследованного от B.

8
задан user1156548 21 February 2012 в 12:41
поделиться