You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python无法访问以双下划线开头的类属性?

报错原因

Python 对以两个下划线开头、且不以两个下划线结尾的类属性/实例属性会触发*名称改写(Name Mangling)*机制:解释器会自动将这类属性的名称重命名为_类名__原属性名的格式,核心作用是避免子类与父类的同名属性冲突,是Python原生提供的私有属性保护逻辑。

你代码中定义的__C完全符合名称改写的触发规则,因此类定义完成后,原名称__C已经不存在,实际被改写为_MyEnumType__C,直接访问MyEnumType.__C自然会抛出属性不存在的异常。

正确访问方式

方法1:直接使用改写后的属性名(仅适合调试场景)

直接调用改写后的属性名即可读取到对应值:

print(MyEnumType._MyEnumType__C)

提示:该方式绕过了属性私有化的设计约定,不推荐在正式业务代码中使用。

方法2:类内部封装公开访问接口(规范写法)

如果确实需要对外暴露该私有属性的读取权限,推荐在类内部封装专门的读取方法,符合面向对象的封装规范:

class MyEnumType(object):
    A = 1
    B = 2
    __C = 3
    
    @classmethod
    def get_private_c(cls):
        return cls.__C

# 调用公开接口访问
print(MyEnumType.get_private_c())

内容的提问来源于stack exchange,提问作者James Wierzba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:54:04