在 Python 面向对象编程 中,理解类的内部结构对掌握高级特性至关重要。其中,__bases__ 是一个非常有用的内置属性,它能帮助我们了解一个类从哪些父类继承而来。本文将用通俗易懂的方式,带你全面认识 __bases__ 属性,并通过示例代码加深理解。
__bases__ 是每个 Python 类都自带的一个特殊属性,它是一个 元组(tuple),包含了该类直接继承的所有父类(基类)。这个属性在 Python 类继承 机制中起着核心作用。

让我们从一个简单的例子开始:
class Animal: passclass Dog(Animal): pass# 查看 Dog 类的 __bases__print(Dog.__bases__)运行结果:
(<class '__main__.Animal'>,)
可以看到,Dog.__bases__ 返回了一个包含 Animal 类的元组,说明 Dog 直接继承自 Animal。
Python 支持多继承,此时 __bases__ 会按继承顺序列出所有直接父类:
class Flyable: passclass Swimmable: passclass Duck(Animal, Flyable, Swimmable): passprint(Duck.__bases__)输出:
(<class '__main__.Animal'>, <class '__main__.Flyable'>, <class '__main__.Swimmable'>)
这清楚地展示了 Duck 类同时继承了三个父类,且顺序与定义时一致。
在 Python 3 中,所有类默认继承自 object。但如果你没有显式指定父类,__bases__ 会显示 (object,) 吗?我们来验证:
class MyClass: passprint(MyClass.__bases__)输出:
(<class 'object'>,)
是的!即使你没写 (object),Python 3 也会自动将其视为 object 的子类。
初学者容易混淆 __bases__ 和 __mro__。它们的区别如下:
__bases__:只包含 直接父类(即你在类定义括号里写的那些类)。__mro__(Method Resolution Order):包含整个继承链中 所有祖先类,包括间接父类和 object,用于决定方法调用顺序。print(Duck.__bases__)print(Duck.__mro__)输出对比:
# __bases__(<class '__main__.Animal'>, <class '__main__.Flyable'>, <class '__main__.Swimmable'>)# __mro__(<class '__main__.Duck'>, <class '__main__.Animal'>, <class '__main__.Flyable'>, <class '__main__.Swimmable'>, <class 'object'>)
虽然日常开发中不常直接使用 __bases__,但在以下场景非常有用:
通过本教程,你应该已经掌握了 Python __bases__属性 的核心概念和用法。记住:
__bases__ 是一个元组,包含类的直接父类。希望这篇教程能帮你打下坚实的 Python 基础!如果你觉得有用,欢迎分享给其他正在学习 Python 的朋友。
本文由主机测评网于2025-12-19发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025129934.html