Python类继承详解:单继承、多继承、方法重写与私有成员

清欢
清欢
发布时间:2026-10-14 | 3人浏览过
原创

本文深入解析Python类的继承机制,涵盖单继承与多继承的语法及优先级规则。详细演示如何重写父类方法、使用super()调用父类逻辑,以及通过__mro__查看继承链。重点讲解私有属性和方法的访问限制,展示如何通过公有接口安全读写私有数据,帮助开发者掌握面向对象编程的核心技巧。

一、继承的格式

在Python中定义类继承时,需在类名后的括号内指定父类名称,从而建立子类与父类的关系。


class 类名(父类名):
 代码

二、单继承

接下来演示单继承的具体应用,创建一个名为Man的子类,使其继承自Master类,并验证子类能否直接调用从父类继承来的showSkill方法。


class Master():
    def __init__(self):
        self.skill='炒菜'
    def showSkill(self):
        print(self.skill)

class Man(Master):
    pass

man=Man()
man.showSkill()

炒菜

三、多继承

在类定义的括号中列出多个父类名称,并以逗号分隔,即可实现多继承。需要注意的是,当多个父类中存在同名方法或属性时,子类将优先继承排在第一位的父类中的对应成员。


'''
测试python多继承
多继承时,若父类有同名的属性或方法,则优先继承先继承的父类
'''

class Master():
    def __init__(self):
        self.skill='炒菜'
    def showSkill(self):
        print(self.skill)

class Bagger():
    def __init__(self):
        self.skill='乞讨'
    def showSkill(self):
        print(self.skill)

class Man(Master,Bagger):
    pass

man=Man()
man.showSkill()

炒菜

四、重写父类方法

在Python中实现方法重写无需使用override等关键字,只需在子类中重新定义同名方法即可覆盖父类实现。


class Master():
    def __init__(self):
        self.skill='炒菜'
        print("Master初始化完毕")
    def showSkill(self):
        print(self.skill)

class Bagger():
    def __init__(self):
        self.skill='乞讨'
        print("Bagger初始化完毕")
    def showSkill(self):
        print(self.skill)

#重写父类的方法
class Man(Master,Bagger):
    #重写__init__方法时,并不会调用父类的__init方法
    def __init__(self):
        #重写父类的属性skill
        self.skill='飞天'
    def showSkill(self):
        print("我的技能是:"+self.skill)

man=Man()
man.showSkill()

我的技能是:飞天

五、打印继承关系

利用__mro__属性可以查看当前类及其所有祖先类的继承顺序,获取完整的继承链信息。


class Master():
    def __init__(self):
        self.skill='炒菜'
    def showSkill(self):
        print(self.skill)

class Bagger(Master):
    pass

class Man(Bagger):
    pass

man=Man()
print(Man.__mro__)

六、调用父类方法

即使子类重写了父类方法,仍可通过super().方法名的方式显式调用父类中的原始实现,确保父类逻辑得以执行。


class Master():
    def __init__(self):
        self.skill='炒菜'
    def showSkill(self):
        print(self.skill)

class Man(Master):
    def __init__(self):
        self.skill='吃饭'
    def showSkill(self):
        print(self.skill)
        super().__init__()
        super().showSkill()

man=Man()
man.showSkill()

吃饭 炒菜

七、私有属性与方法

在属性或方法名前添加双下划线__可将其标记为私有。在继承体系中,父类的私有方法无法被子类直接继承,但其他公有或受保护成员均可继承。虽然子类不能直接访问私有属性,但可通过父类提供的公有方法进行间接访问。以下示例定义了私有属性money,并通过公有方法set_money与get_money在子类中对其进行读写操作。


class Master():
    #在属性或方法面前加__,表示访问权限为私有
    __money=100000
    def __init__(self):
        pass
    #设置为私有方法,无法被继承
    def __showMoney(self):
        print(self.__money)
    #使子类可以通过共有方法访问私有属性
    def get_money(self):
        return self.__money
    def set_money(self,money):
        self.__money=money

class Man(Master):
    pass

man=Man()
print("原来的money:"+man.get_money().__str__())
man.set_money(12)
print("后来的money:"+man.get_money().__str__())

原来的money:100000 后来的money:12

至此,关于Python类继承的基础知识讲解完毕。如需了解更多相关技术内容,建议查阅本站往期文章或继续浏览后续章节,感谢支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表