Python超类反射 [英] Python super class reflection

查看:48
本文介绍了Python超类反射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有 Python 代码

class A():经过B类():经过C类(A,B):经过

而且我有 C 类,有没有办法遍历它的超类(AB)?类似伪代码的东西:

<预><代码>>>>magicGetSuperClasses(C)(<类型'A'>,<类型'B'>)

一种解决方案似乎是 inspect modulegetclasstree函数.

def magicGetSuperClasses(cls):返回 [o[0] for o in inspect.getclasstree([cls]) if type(o[0]) == type]

但这是实现目标的Pythonian"方式吗?

解决方案

C.__bases__ 是一个超类的数组,所以你可以像这样实现你的假设函数:

def magicGetSuperClasses(cls):返回 cls.__bases__

但我想在大多数情况下直接引用 cls.__bases__ 会更容易.

If I have Python code

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

and I have class C, is there a way to iterate through it's super classed (A and B)? Something like pseudocode:

>>> magicGetSuperClasses(C)
(<type 'A'>, <type 'B'>)

One solution seems to be inspect module and getclasstree function.

def magicGetSuperClasses(cls):
    return [o[0] for o in inspect.getclasstree([cls]) if type(o[0]) == type]

but is this a "Pythonian" way to achieve the goal?

解决方案

C.__bases__ is an array of the super classes, so you could implement your hypothetical function like so:

def magicGetSuperClasses(cls):
  return cls.__bases__

But I imagine it would be easier to just reference cls.__bases__ directly in most cases.

这篇关于Python超类反射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆