如何获取Python类的父类?
当前回答
New-style类有一个mro方法,你可以调用它,它会按照方法解析的顺序返回父类的列表。
其他回答
获得所有父元素的最快方法是使用内置的__mro__。
例如,repr(YOUR_CLASS.__mro__)。
以下几点:
import getpass
getpass.GetPassWarning.__mro__
...输出,依次为:
(< getpass类”。GetPassWarning'>, <type '异常。UserWarning'>, <type '异常。警告'>,<type '异常。异常'>,<type '异常。BaseException'>, <type 'object'>)
你知道了。“最佳”答案可能有更多的投票,但这比一些复杂的for循环要简单得多,每次只查看__bases__一个类,更不用说当一个类扩展了两个或多个父类时。导入和使用inspect只会不必要地使范围变得模糊。
如果你只是想要获取父类,使用__mro__(正如@naught101所指出的)来获取方法解析顺序(以便知道init的执行顺序)。
base(并首先获取现有对象的类):
>>> some_object = "some_text"
>>> some_object.__class__.__bases__
(object,)
对于最新的Python版本中的mro:
>>> some_object = "some_text"
>>> some_object.__class__.__mro__
(str, object)
显然,当你已经有一个类定义时,你可以直接调用__mro__:
>>> class A(): pass
>>> A.__mro__
(__main__.A, object)
New-style类有一个mro方法,你可以调用它,它会按照方法解析的顺序返回父类的列表。
使用以下属性:
cls.__bases__
从文档中可以看出:
类的基类元组 对象。
例子:
>>> str.__bases__
(<type 'basestring'>,)
另一个例子:
>>> class A(object):
... pass
...
>>> class B(object):
... pass
...
>>> class C(A, B):
... pass
...
>>> C.__bases__
(<class '__main__.A'>, <class '__main__.B'>)
这个函数将打印一个对象的所有类,而在每一步中,下一个对象将是最左边的父类。
def print_root_left(class_):
while True:
print(class_)
# Check there if are no bases then we have reached the root class
if not class_.__bases__:
break
class_=class_.__bases__[0] # use the left most parent
example = "hello"
print_root_left(example.__class__)
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录