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

类属性是否会被继承?Python子类访问父类类属性异常问题

问题分析与解决

为什么无法访问CONSTANT?

问题出在Python的命名空间查找规则:

  • 在child类的顶层代码(比如直接写print(CONSTANT)):类定义时,Python会创建临时命名空间,但此时父类的类属性还没被纳入当前类的直接访问范围,直接写CONSTANT会去全局命名空间查找,自然找不到父类的属性。
  • 在实例方法my_method里:方法内的命名空间默认只查找局部变量、全局变量,不会自动向上遍历父类的类属性,因此也无法直接找到CONSTANT。

不转为实例属性的访问方案

1. 类定义阶段(类体顶层)访问

直接通过父类名称访问类属性:

#! /usr/bin/env python3
from parent import parent

class child(parent):
    print(parent.CONSTANT)  # 用父类名直接访问类属性

2. 实例方法内访问

有三种可靠方式:

#! /usr/bin/env python3
from parent import parent

class child(parent):
    def my_method(self):
        print(parent.CONSTANT)  # 方式1:直接通过父类名访问
        print(self.__class__.CONSTANT)  # 方式2:通过实例关联的类对象访问
        print(child.CONSTANT)  # 方式3:通过子类名访问(子类已继承该属性)

补充说明

如果子类后续重写了CONSTANT属性,用子类名或self.__class__会拿到子类的属性值,用父类名则始终获取父类的原始值,可根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:39:13