Python类继承详解:单继承、多继承、方法重写与私有成员
本文深入解析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类继承的基础知识讲解完毕。如需了解更多相关技术内容,建议查阅本站往期文章或继续浏览后续章节,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













