德洛瓦:被弃之族免安装正式版
3.63G · 2025-10-22
大家好,我是倔强青铜三。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
欢迎来到 苦练Python第47天!
今天,我们把「继承」这件听起来高大上的事儿拆成 5 根辣条 ——
单继承、方法重写、super 连环call、多继承 MRO、菱形陷阱自救指南。
一口气吃完,你就能写出高手级别的可扩展代码。
class Animal: # 父类(基类)
def __init__(self, name):
self.name = name
def speak(self):
return "???"
class Dog(Animal): # 子类(派生类)
def speak(self):
return f"{self.name}: 汪汪!"
>>> d = Dog("旺财")
>>> d.speak()
旺财: 汪汪!
class Cat(Animal):
def speak(self):
base = super().speak() # 先把父类的结果薅过来
return f"{base} → 喵喵~" # 再加点私货
>>> c = Cat("咪咪")
>>> c.speak()
??? → 喵喵~
super()
的 3 个用处:class Flyable:
def fly(self):
return "I can fly!"
class Bird(Animal, Flyable): # 逗号分隔,多爹
pass
>>> b = Bird("啾啾")
>>> b.speak(), b.fly()
('啾啾: ???', 'I can fly!')
class A:
def hi(self): print("A")
class B(A):
def hi(self): print("B")
class C(A):
def hi(self): print("C")
class D(B, C):
pass
>>> D.__mro__
(<class 'D'>, <class 'B'>, <class 'C'>, <class 'A'>, <class 'object'>)
class Base:
def __init__(self):
print("Base init")
class Left(Base):
def __init__(self):
Base.__init__(self)
print("Left init")
class Right(Base):
def __init__(self):
Base.__init__(self)
print("Right init")
class Bottom(Left, Right):
def __init__(self):
Left.__init__(self)
Right.__init__(self)
>>> Bottom()
Base init
Left init
Base init # 悲剧:Base 被调了两次
Right init
super()
一条龙class Base:
def __init__(self):
print("Base init")
class Left(Base):
def __init__(self):
super().__init__()
print("Left init")
class Right(Base):
def __init__(self):
super().__init__()
print("Right init")
class Bottom(Left, Right):
def __init__(self):
super().__init__()
print("Bottom init")
>>> Bottom()
Base init
Right init
Left init
Bottom init
super()
交给 MRO 下一棒需求 | 代码 |
---|---|
实例是否属于某类 | isinstance(obj, cls) |
类是否继承某类 | issubclass(cls1, cls2) |
查看 MRO | cls.__mro__ 或 help(cls) |
场景 | 关键语法/技巧 |
---|---|
单继承 | class Child(Parent): |
重写方法 | def method(self): ... |
扩展父类 | super().method() |
多继承 | class C(A, B): |
避免重复初始化 | 全部用 super() |
查看调用顺序 | cls.__mro__ |
单继承让代码复用,多继承让功能拼乐高;
牢记 super()
+ MRO,就能在多重继承的迷宫里不迷路!
华为鸿蒙 HarmonyOS 6 支持与苹果 iOS / iPadOS / macOS 互传体验
Netflix 宣布全力投入 AI:“能帮人类把故事讲得更好”