检查A是否是Python中B的超类

And*_*ndz 27 python reflection superclass

class p1(object): pass
class p2(p1): pass
Run Code Online (Sandbox Code Playgroud)

所以p2是p1的子类.有没有办法以编程方式找出p1是[p2]的超类[es]之一?

小智 43

使用<class> .__ bases__似乎是你正在寻找...

>>> class p1(object): pass
>>> class p2(p1): pass
>>> p2.__bases__
(<class '__main__.p1'>,)
Run Code Online (Sandbox Code Playgroud)

  • @nikow,对...但是issubclass()的问题是它需要给一个类进行比较,而__ bases __将直接给你超类.根据具体情况,这两种解决方案都很有用. (14认同)
  • -1:`issubclass`肯定是更好的解决方案. (3认同)
  • 对于我的问题,issubclass()是更好的答案,但这个答案也值得赞赏. (2认同)

Ser*_*rge 38

是的,有方法.您可以使用issubclass函数.

如下:

class p1(object):pass
class p2(p1):pass

issubclass(p2, p1)
Run Code Online (Sandbox Code Playgroud)

  • 注意:`issubclass(A,A)`计算为'True`.这可能不直观.至少在我看来,一个类似乎不是**自己的子类.`issubclass`应该被称为`istypeofclass`. (2认同)

Aze*_*utt 6

根据您要做的事情,"mro"方法也很有用.


Jor*_*ril 5

我认为你的意思是使用"class"而不是"def".. :)无论如何,试试吧 p2.__bases__