class p1(object): pass
class p2(p1): pass
Итак, p2 является подклассом p1. Есть ли способ узнать программно, что p1 является [одним из] суперкласса [ов] p2?
class p1(object): pass
class p2(p1): pass
Итак, p2 является подклассом p1. Есть ли способ узнать программно, что p1 является [одним из] суперкласса [ов] p2?
Да, есть способ. Вы можете использовать функцию issubclass.
Следующее:
class p1(object):pass
class p2(p1):pass
issubclass(p2, p1)
issubclass(A, A) оценивается как True. Это может быть не интуитивно понятно. По крайней мере, мне кажется очевидным, что класс не является своим собственным подклассом. issubclass надо было звать istypeofclass.
- person ilmiacs; 09.01.2013
set, это не беспокоит. А является подмножеством А.
- person Vineet Menon; 13.03.2015
использование ‹class›.__bases__ похоже на то, что вы ищете...
>>> class p1(object): pass
>>> class p2(p1): pass
>>> p2.__bases__
(<class '__main__.p1'>,)
__bases__ даст вам только прямых родителей (те, что в скобках определения класса), в то время как issubclass проверяет всю цепочку наследования.
- person wuerg; 15.04.2013
В зависимости от того, что вы пытаетесь сделать, метод «mro» также может быть полезен.
Я думаю, вы хотели использовать "класс" вместо "деф".. :) В любом случае, попробуйте p2.__bases__