EADST

Python 继承总结:父类与子类的调用关系

在 Python 面向对象编程中,继承 (Inheritance) 是一个核心机制。通过继承,子类可以复用父类的属性和方法,并在需要时覆盖或扩展它们。

本文用几个小例子来梳理:


1. 基本继承

class Parent:
    def hello(self):
        print("Hello from Parent")

class Child(Parent):
    pass

c = Child()
c.hello()   # 输出: Hello from Parent

👉 子类 Child 没有实现 hello 方法,因此调用时会沿着 MRO(方法解析顺序) 去父类找。


2. 方法重写(覆盖)

class Parent:
    def hello(self):
        print("Hello from Parent")

class Child(Parent):
    def hello(self):
        print("Hello from Child")

c = Child()
c.hello()   # 输出: Hello from Child

👉 子类里定义了同名方法,父类的方法就被覆盖(Override)。


3. 使用 super() 调用父类方法

有时希望子类在重写方法的同时,保留父类逻辑:

class Parent:
    def hello(self):
        print("Hello from Parent")

class Child(Parent):
    def hello(self):
        super().hello()   # 调用父类方法
        print("Hello from Child")

c = Child()
c.hello()

输出:

Hello from Parent
Hello from Child

4. 父类 __call__ 调用子类方法

一个常见设计是父类在 __call__ 中固定调用几个“步骤方法”,子类只需重写步骤:

class Base:
    def __call__(self, data):
        data = self.step1(data)
        data = self.step2(data)
        return data

    def step1(self, data):
        return data + " base_step1 "

    def step2(self, data):
        return data + " base_step2 "

class Child(Base):
    def step2(self, data):
        return data + " child_step2 "

c = Child()
print(c("input"))

输出:

input base_step1  child_step2 

👉 父类 __call__ 会自动调用子类重写的 step2,这是 动态绑定 的体现。


5. 子类完全自定义 __call__

如果子类自己定义了 __call__,就会 覆盖掉父类的 __call__:

class Base:
    def __call__(self, data):
        return self.process(data)

    def process(self, data):
        return data + " base "

class Child(Base):
    def __call__(self, data):
        return data + " child "

c = Child()
print(c("input"))

输出:

input child 

👉 父类的 __call__ 完全被替代,不会再执行。


6. 总结规律

  • 继承默认走父类 → 子类没实现的方法会去父类找。
  • 方法名相同 → 子类方法覆盖父类。
  • 父类内部调用子类方法 → Python 的动态绑定机制决定了:即使在父类中写 self.xxx(),只要子类实现了 xxx,就会调用子类的。
  • 子类定义 __call__ → 会完全替代父类 __call__ 的执行逻辑,除非显式 super().__call__()。

✅ 记住一个口诀:

父类搭骨架,子类来填肉。 父类提供通用流程,子类通过覆盖方法来定制行为。

相关标签
About Me
XD
Goals determine what you are going to be.
Category
标签云
音频 图标 EXCEL RGB 论文速读 CLAP Proxy Zip Harness NameSilo Pytorch Ptyhon HaggingFace LoRA CAM tqdm Quantization 搞笑 Search 签证 Use 阿里云 diffusers FP64 COCO 关于博主 uwsgi GGML LeetCode UI TSV 版权 Bipartite CUDA Cloudreve SPIE Magnet Firewall Datetime Ubuntu Tracking Pickle FP8 printf Knowledge TTS VGG-16 XGBoost 继承 图形思考法 Google tar Food LaTeX XML Shortcut CTC Crawler Review git-lfs Excel Plotly hf Algorithm Hungarian Input InvalidArgumentError Image2Text Qwen2 Statistics 第一性原理 Tiktoken Bin ms-swift ModelScope Qwen TensorFlow API网关 GoogLeNet RAR Python UNIX Windows Michelin 多进程 递归学习法 Base64 VPN scipy Attention Hotel SQL Rebuttal Vmess Tensor LLAMA Nginx Streamlit Qwen2.5 Password Disk Domain Video Github DeepStream Random SQLite Docker AI GPTQ GIT Llama FP32 logger NLP Bert 多线程 uWSGI 净利润 Paper 算法题 v2ray mmap Distillation 飞书 Conda OCR icon Card News PIP DeepSeek LLM 强化学习 SAM 公式 长期记忆 Breakpoint Paddle Jev FlashAttention Plate Vim API Quantize HuggingFace Numpy Sklearn Land Linux Data 报税 Animate ResNet-50 Math NLTK Pandas Jupyter SVR Freesound Mixtral Safetensors 论文 Baidu Pillow FastAPI IndexTTS2 BTC JSON v0.dev torchinfo Miniforge C++ Gemma git Permission 自我改进 Jetson Bitcoin Agent Template VSCode MD5 Clash OpenCV 财报 BF16 OpenAI CEIR Claude Hilton TensorRT CC CV FP16 WebCrawler Translation Anaconda CSV Transformers Website Markdown 顶会 域名 WAN ChatGPT PDF YOLO llama.cpp Django transformers Dataset Color Interview ONNX QWEN 证件照 Augmentation PDB PyCharm Web PyTorch RL GPT4 腾讯云 云服务器 BeautifulSoup Diagram Logo Git Heatmap
站点统计

本站现有博文339篇,共被浏览1002218次

本站已经建立2712天!

热门文章
文章归档
回到顶部