Python中的继承

本文介绍了Python中的继承概念,包括单继承和多继承的语法,以及子类与父类的关系。通过实例说明了子类如何重写父类方法、调用父类的同名属性和方法,以及使用super()调用父类方法。文章总结了继承的特点,并鼓励读者通过实践掌握继承的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中的继承



继承的概念

    面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”,继承的过程,就是从一般到特殊的过程。在某些
OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

实现继承是指使用基类的属性和方法而无需额外编码的能力。

在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager
也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。


一、继承的语法

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下:

# 父类A
class A(object):
	def __init__(self):
	self.num = 1
def info_print(self):
	print(self.num)
# 子类B
class B(A):
	pass
result = B()
result.info_print() # 1

如果两个类存在父子关系,那么子类即使没有任何的属性和方法,子类继承父类,子类就拥有了父类中的属性和方法的使用权

单继承

故事主线:一个煎饼果子老师傅,在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼果子的
技术。师父要把这套技术传授给他的唯一的最得意的徒弟。
分析:徒弟是不是要继承师父的所有技术

# 1. 师父类
class Master(object):
	def __init__(self):
	self.kongfu = '[古法煎饼果子配方]'
def make_cake(self):
	print(f'运用{self.kongfu}制作煎饼果子')
 
# 2. 徒弟类
class Prentice(Master):
	pass
# 3. 创建对象daqiu
daqiu = Prentice()
# 4. 对象访问实例属性
print(daqiu.kongfu)
# 5. 对象调用实例方法
daqiu.make_cake()

多继承

故事推进:daqiu是个爱学习的好孩子,想学习更多的煎饼果子技术,所以报班学习煎饼果子技术。。
所谓多继承意思就是一个类同时继承了多个父类

class Master(object):
	def __init__(self):
	self.kongfu = '[煎饼果子配方]'
def make_cake(self):
	print(f'运用{self.kongfu}制作煎饼果子')
# 创建学校类
class School(object):
	def __init__(self):
	self.kongfu = '[独创煎饼果子配方]'
def make_cake(self):
	print(f'运用{self.kongfu}制作煎饼果子')
class Prentice(School, Master):
	pass
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()

二、子类与父类

1.子类重写父类方法

故事:daqiu掌握了师父和培训的技术后,自己潜心钻研出自己的独门配方的一套全新的煎饼果子技术

class Master(object):
	def __init__(self):
		self.kongfu = '[煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')

class School(object):
	def __init__(self):
		self.kongfu = '[独创煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')
# 独创配方
class Prentice(School, Master):
	def __init__(self):
		self.kongfu = '[独创煎饼果子配方]'
def make_cake(self):
	print(f'运用{self.kongfu}制作煎饼果子')

daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()
print(Prentice.__mro__)

子类和父类具有同名属性和方法,默认使用子类的同名属性和方法。

2.子类调用父类的同名方法和属性

故事:很多顾客都希望也能吃到独创技术的煎饼果子。

class Master(object):
	def __init__(self):
		self.kongfu = '[煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')

class School(object):
	def __init__(self):
		self.kongfu = '[独创煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')
class Prentice(School, Master):
	def __init__(self):
		self.kongfu = '[独创煎饼果子配方]'
	def make_cake(self):
 # 如果是先调用了父类的属性和方法,父类属性会覆盖子类属性,故在调用属性前,先调用自己子类的初始化
		self.__init__()
		print(f'运用{self.kongfu}制作煎饼果子')
# 调用父类方法,但是为保证调用到的也是父类的属性,必须在调用方法前调用父类的初始化
 	def make_master_cake(self):
 		Master.__init__(self)
 		Master.make_cake(self)
 	def make_school_cake(self):
 		School.__init__(self)
 		School.make_cake(self)
daqiu = Prentice()
daqiu.make_cake()
daqiu.make_master_cake()
daqiu.make_school_cake()
daqiu.make_cake()

super()调用父类方法

class Master(object):
	def __init__(self):
		self.kongfu = '[煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')
class School(Master):
	def __init__(self):
		self.kongfu = '[独创煎饼果子配方]'
	def make_cake(self):
		print(f'运用{self.kongfu}制作煎饼果子')
# 方法2.1
# super(School, self).__init__()
# super(School, self).make_cake()
# 方法2.2
		super().__init__()
		super().make_cake()
class Prentice(School):
	def __init__(self):
		self.kongfu = '[独创煎饼果子技术]'
	def make_cake(self):
		self.__init__()
		print(f'运用{self.kongfu}制作煎饼果子'
# 子类调用父类的同名方法和属性:把父类的同名属性和方法再次封装
 def make_master_cake(self):
 	Master.__init__(self)
 	Master.make_cake(self)
 def make_school_cake(self):
 	School.__init__(self)
 	School.make_cake(self)
 # 一次性调用父类的同名属性和方法
 def make_old_cake(self):
 # 方法一:代码冗余;父类类名如果变化,这里代码需要频繁修改
 # Master.__init__(self)
 # Master.make_cake(self)
 # School.__init__(self)
 # School.make_cake(self)
 # 方法⼆: super()
 # 方法2.1 super(当前类名, self).函数()
 # super(Prentice, self).__init__()
 # super(Prentice, self).make_cake()
 # 方法2.2 super().函数()
	 super().__init__()
 	super().make_cake()
daqiu = Prentice()
daqiu.make_old_cake()

注意:使用super() 可以自己动查找父类。调用顺序遵循 mro 类属性的顺序。比较适合单继承使用。

小汇总

继承的特点 子类默认拥有父类的所有属性和方法 子类重写父类同名方法和属性 子类调用父类同名方法和属性 super()方法快速调用父类方法

结语

本章讲述了Python中继承的使用,其实继承很简单,只是语法逻辑比较多,看着本章的内容很多,其实有很多重复的,主要是继承的语法和逻辑,弄明白语法与逻辑,继承自然而然就明白了.
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴可以私信我,我会一一答复,感谢认可,感谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aqi00008B

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值