当前位置:首页>python>【Python】Python语法里的继承相关知识点总结

【Python】Python语法里的继承相关知识点总结

  • 2026-09-22 02:41:30
【Python】Python语法里的继承相关知识点总结

水一篇

继承怎么写?

子类名后面的括号里写父类,多个父类用逗号隔开就是多继承。

# 单继承:子类(父类)class Child(Parent):    pass# 多继承:子类(父类1, 父类2, ...)class Child(Parent1, Parent2):    pass

子类会继承哪些东西?

内容
说明
实例方法
def method(self): ...
类方法
@classmethod def cm(cls): ...
静态方法
@staticmethod def sm(): ...
类属性
直接写在类里的变量
实例属性
在 __init__ 等里用 self.xxx = ... 赋值的(通过 __init__ 被调用而继承)

不会自动“复制”的只有以双下划线开头、且不以双下划线结尾的名字(名称改写 name mangling),例如 __private 会变成 _ClassName__private,本质还是能访问,只是名字被改了。

常见用法

1、直接使用父类实现

class Animal:    def speak(self):        return "some sound"class Dog(Animal):    passd = Dog()d.speak()  # "some sound",继承自 Animal

2、重写方法(Override)

class Dog(Animal):    def speak(self):        return "woof"

3、 用 super() 扩展父类行为

class Dog(Animal):    def __init__(self, name):        super().__init__()   # 先调父类的 __init__        self.name = name    def speak(self):        return f"{super().speak()} - woof"  # 先调父类再扩展

4、多继承与方法解析顺序(MRO)多继承时,属性/方法按 MRO 查找(可用 ClassName.__mro__ 看顺序):

class A:    def f(self): return "A"class B(A):    def f(self): return "B"class C(A):    def f(self): return "C"class D(B, C):    passD().__mro__  # (D, B, C, A, object)D().f()      # "B"(先找到 B.f)

Python中的类方法和静态方法是什么?

类方法 @classmethod

  • 第一个参数:约定写 cls,调用时自动传入当前类(不是实例)。
  • 能访问:类属性、其他类方法;不能直接拿到「当前实例」,除非通过参数传入。
  • 常见用途:工厂方法(用类名创建实例)、操作类级别数据、子类继承时 cls 会变成子类。
class MyClass:    count = 0    @classmethod    def from_string(cls, s):        """工厂方法:用字符串创建实例"""        return cls(int(s))    @classmethod    def get_count(cls):        return cls.count# 调用obj = MyClass.from_string("42")  # cls 是 MyClassMyClass.get_count()             # 访问类属性

子类调用时,cls 是子类,所以 from_string 会创建子类实例:

class Sub(MyClass):    passSub.from_string("1")  # 得到的是 Sub 的实例,不是 MyClass 的

静态方法 @staticmethod

  • 参数:没有自动传入的 self 或 cls,和普通函数一样。
  • 不能直接访问:类属性、实例属性(除非通过参数传进来)。
  • 常见用途:把和类逻辑相关的工具函数放在类里,组织代码;或不需要 self/cls 的辅助函数。
class MyClass:    @staticmethod    def is_valid(x):        return isinstance(x, int) and x > 0    def use_it(self, x):        if MyClass.is_valid(x):  # 或 self.is_valid(x)            ...

对比小结

类型
第一个参数
能访问实例?
能访问类?
典型用途
实例方法
self
✅
✅ self.__class__
操作实例/类
类方法
cls
❌
✅
工厂方法、类级别逻辑
静态方法
无
❌
❌
与类相关的工具函数
  • 类方法:需要「当前是哪个类」时用(cls),常用来造对象或算类级别的东西。
  • 静态方法:不需要 self 也不需要 cls,只是挂在类名下的普通函数,便于归类。

最新文章

随机文章