面向对象程序设计五(Python类继承、父子类关系)
- 父子类关系是面向对象程序设计中不可缺少的一部分,本文通过类比方法引入父子类继承的概念
- 并在理论基础上提供步步解析的详细示例,适合新手学习、老手复习
ps:建议新手看完类比概念后先简单过一遍示例,最后回头看语法之后,再过一边示例,有利于更好理解其性质特点
- 父子类关系
- 概念
- 父类
- 子类(继承父类属性+行为,同时有自己属性/行为/属性+行为)
- eg.
- 父类:属性:西瓜;行为:解渴
- 父类的继承子类A:属性:有籽,西瓜;行为:解渴
- 父类的继承子类B:属性:无籽,西瓜;行为:解渴
- 子类继承父类
- 子类实例使用父类实例属性情况
- 语法:四步走
- 子类名后添加父类名+括号
- class Student(Human):
- 子类实例属性添加父类实例属性变量
- def __init__(self, weight, height, hobby):
- 子类构造函数内添加继承语句,并且键入父类实例属性变量(weight,height)
- super().__init__(weight, height)
- 实例化赋予父类实例属性(63,178)+子类实例属性('basketball')
- A = Student(63,178,'basketball')
- 若在第三步中,提前赋予父类实例属性,则第四步只要赋予子类实例属性(后续代码有演示)
- 概念
# 语法实例:# 定义父类:class Human: goal = 'love and peace' # 父类属性 def __init__(self, formweight, formheight): self.weight = formweight # 建立父类实例属性weight self.height = formheight # 建立父类实例属性height def Run(self): # 建立父类方法 print('成功调用父类的方法')
# 定义继承父类的子类:# 情况1:# 子类实例未使用父类实例的实例属性# 子类仅使用父类的类属性、方法class Student(Human): # 类命名格式多了(Human),表示Student继承于Human类 S = '99' # 定义子类特有的子类类属性 def __init__(self, formhobby): # 开始构造子类实例 self.hobby = formhobby # 建立子类实例特有的实例属性hobby print('继承的父类-类属性为', self.goal) # 子类实例使用父类的类属性 self.Run() # 子类实例使用父类方法 print('子类实例的字典:', self.__dict__) # 检验是否存入子类实例dict中A = Student('basketball') # 子类实例化,basketbll传入子类实例属性hobby# 输出结果:# 继承的父类-类属性为 love and peace # 成功调用父类的方法 # 子类实例的字典: {'hobby': 'basketball'}# --------------------------------------------------------------------------------# 第17行结果,说明子类实例可以调用父类类属性goal# 第18行结果,说明子类实例可以调用父类的方法Run# 第19行结果,说明子类实例的字典dict里无父类类属性goal,无子类类属性S,但却可以调用# 说明父子类继承后子类实例仍然遵循,实例仅访用类的机制# 个人理解:因为子类是继承于父类,拥有父类的一切属性和功能,并且有自己新的属性和功能# 相当于子类是父类的加强版,类比:手机1可以打电话,手机2是手机1的升级版可以打电话+短信# 导出结论:# '子类继承父类过程' 和 '类实例化' 的区别:# 前者称:继承(特点:存储上级的一切)# 后者称:仅访用(特点:可以访问使用上级功能,但不存储在dict里)
# 定义继承父类的子类:# 情况2:# 子类实例使用父类实例的实例属性# 子类使用父类的类属性、方法class Student(Human): # 表示继承关系 def __init__(self, fatherw, fatherh, formhobby): # 设置2+1参数入口 super().__init__(fatherw, fatherh) # 利用父类的构造函数添加子类的实例属性 self.hobby = formhobby # 建立子类实例特有的实例属性hobby print('录入的信息有:', self.weight, self.height, self.hobby)A = Student(63,178,'basketball')# 输出结果:# 录入的信息有: 63 178 basketball
⭐看到这里了,如果觉得文章不错的话,就一键三连吧⭐
⭐有有疑问欢迎评论区留言、私信博主羽十八ya交流⭐
⭐你的支持会给博主更新blog带来巨大滴动力!Thank you!⭐