Python疑问:为何类实例无法访问__bases__属性?
为什么Python实例不能直接访问__bases__属性?
- __bases__是类对象专属的特殊属性,Python并没有开放让实例直接访问它的权限。
- 虽然实例查找属性时,确实会先查自身
__dict__,再回溯到类的__dict__,但像__bases__、__name__这类类级别的特殊属性,Python做了特殊处理,不会让实例通过常规属性访问路径获取到。
举个实际代码例子:
class C1: pass # 类对象可以正常访问__bases__ print(C1.__bases__) # 输出: (<class 'object'>,) obj1 = C1() # 实例直接访问会报错 print(obj1.__bases__) # 抛出 AttributeError: 'C1' object has no attribute '__bases__'
如果需要通过实例获取类的基类,你可以先拿到实例所属的类,再访问__bases__:
# 两种写法效果一致 print(type(obj1).__bases__) print(obj1.__class__.__bases__)
简单总结:普通类属性可以被实例直接访问,但Python为类对象保留了一批特殊属性,__bases__就是其中之一,只能由类本身访问。
内容的提问来源于stack exchange,提问作者TimeToCodeTheRoad
相关产品推荐
相关产品推荐

