Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 13, 2011 20:36:22

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Получение иерархии классов

Нужна функция возвращающая иерархию классов Python. Вот, что я сотворил:

def get_class_hierarchy(obj):
if obj.__class__.__name__=='type':
c=obj
else:
c=obj.__class__
lst=
while c.__base__:
lst.append(c.__base__.__name__)
c=c.__base__
return lst

Только работает она, если нет множественного наследования.
Есть еще:

from inspect import getclasstree
getclasstre()

Но она не возвращает всю иерархию.
Спасибо.



Отредактировано (Июнь 13, 2011 20:56:42)

Офлайн

#2 Июнь 13, 2011 21:06:49

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Получение иерархии классов

Как можно использовать эту функцию и зачем?



Офлайн

#3 Июнь 13, 2011 21:11:45

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Получение иерархии классов

Soteric
Как можно использовать эту функцию и зачем?
Для получения списка иерархии классов какого-либо объекта/класса. Меня интересует, не существует ли более простого и эффективного решения с поддержкой множественного наследования.



Офлайн

#4 Июнь 14, 2011 13:52:45

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Получение иерархии классов

Меня интересовало как раз зачем нужен такой список. В каких-то отладочных целях или приложение так задизайнено, что оно принимает какие-то решения, основываясь на иерархии?



Офлайн

#5 Июнь 14, 2011 23:00:18

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Получение иерархии классов

Soteric
зачем нужен такой список
например его можно использовать в каком-нибудь Python IDE.



Офлайн

#6 Июнь 15, 2011 00:16:23

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение иерархии классов

class A(object): pass
class B(object): pass
class C(A, B): pass
class D(C): pass


print(A.__mro__)
print(B.__mro__)
print(C.__mro__)
print(D.__mro__)
(<class ‘__main__.A’>, <type ‘object’>)
(<class ‘__main__.B’>, <type ‘object’>)
(<class ‘__main__.C’>, <class ‘__main__.A’>, <class ‘__main__.B’>, <type ‘object’>)
(<class ‘__main__.D’>, <class ‘__main__.C’>, <class ‘__main__.A’>, <class ‘__main__.B’>, <type ‘object’>)



Отредактировано (Июнь 15, 2011 00:16:48)

Офлайн

#7 Июнь 15, 2011 22:52:19

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Получение иерархии классов

bazooka, жаль нельзя плюсик поставить на пост :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version