Как определить, является ли класс потомком другого класса? - PullRequest
13 голосов
/ 19 мая 2009

У меня есть функция, которая принимает класс (не экземпляр), и, в зависимости от того, является ли это конкретный класс или подкласс этого , мне нужно передать его одному из двух других (сторонние) заводские функции.

(Чтобы предотвратить любые возражения, я знаю, что это не очень Pythonic, но я зависим от того, что принимает сторонняя библиотека.)

issubclass работает только для экземпляров, но не для самих объектов класса. Я полагаю, что могу создать экземпляр класса, выполнить issubclass и выбросить экземпляр, но это кажется немного расточительным.

Вот что я сейчас делаю, опираясь на встроенный атрибут mro , чтобы определить, есть ли определенный класс в списке предков моего класса. Это безопасно, и есть ли лучший способ сделать это?

if GenericClass in myclass.__mro__:
    result = generic_factory(myclass)
else:
    result = other_factory(myclass)

1 Ответ

28 голосов
/ 19 мая 2009

issubclass работает только для экземпляров, но не для самих объектов класса.

У меня отлично работает:

>>> class test(object):pass
...
>>> issubclass(test,object)
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...