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

Python继承:基类能否访问派生类的成员?

基类为何能访问派生类的属性/方法?

这个问题问得特别好!我刚接触Python继承的时候也卡过这个点,咱们先把你的示例代码补全(方便大家理解场景),再拆解背后的逻辑:

完整示例代码

class Fish:
    def color(self):
        # 这里的self指向的是调用方法的实例,而不是Fish类本身
        return self._colour

class Goldfish(Fish):
    def __init__(self):
        self._colour = "golden"

# 测试调用
gf = Goldfish()
print(gf.color())  # 输出:golden

核心逻辑:self的本质是「调用方法的实例」

在Python的面向对象中,实例方法的第一个参数self,永远指向的是调用这个方法的具体实例对象,而不是定义该方法的类的实例。

当你执行gf.color()时:

  • gf是Goldfish的实例,它继承了Fish类的color方法
  • 调用color方法时,Python会自动把gf作为self参数传入Fish.color()中
  • 此时self就是Goldfish的实例,它拥有子类定义的_colour属性,所以基类的color方法自然能通过self._colour访问到这个属性

反证:基类实例无法访问子类属性

如果我们直接创建基类Fish的实例并调用color方法,就会报错——因为基类实例本身没有_colour属性:

f = Fish()
print(f.color())  # 抛出错误:AttributeError: 'Fish' object has no attribute '_colour'

注意:这种写法不推荐

虽然语法上可行,但基类依赖子类的属性是一种反模式,违反了依赖倒置原则:

  • 基类应该是抽象、通用的,不应该依赖子类的具体实现
  • 更好的做法是让基类定义必要的属性(比如给个默认值),或者把color设计成抽象方法,强制子类实现:
    from abc import ABC, abstractmethod
    
    class Fish(ABC):
        @abstractmethod
        def color(self):
            pass
    
    class Goldfish(Fish):
        def color(self):
            return "golden"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:08