继承
Python也是面向对象的语言。
面向对象的一个特点是对代码重用,重用的一种实现方法就是通过继承机制。与java中概念相似,有父类型与子类型的概念。
现在书中的例子:
学校中有两种类型的人:老师、学生。
他们有一些共同的特征:姓名、年龄、地址。
老师还有一些特有的特征:薪水,课程,假期;学生的特有特征:成绩、学费。
当然,可以分别写两个类:老师的类,学生的类。
但如果又要增加一个特征,比如:性别,这样需要在老师的类中加上这个属性,也需要在学生的类中加上这个属性。这样就比较繁琐。
有没有办法优化呢?
可以把老师、学生的共同特征,提取出来,新建一个类,SchoolMember。这个类中放的是学校成员共同的一些特征:姓名、年龄、地址、性别等
再新建老师的类:Teacher,
学生的类:Student,分别继承SchoolMember这个类,同时也加上各自的属性。
基类代码SchoolMember如下:
class SchoolMember: # 代表任何学校里的成员 def __init__(self, name, age): self.name = name self.age = age print 'Initialized SchoolMember:{}'.format(self.name) def tell(self): print 'Name:"{}" Age:"{}"'.format(self.name, self.age)
教师类Teacher代码如下:
class Teacher(SchoolMember): # 代表一位老师 def __init__(self, name, age, salary): SchoolMember.__init__(self, name, age) self.salary = salary print 'Initialized Teacher:{}'.format(self.name) def tell(self): SchoolMember.tell(self) print 'Salary: "{:d}"'.format(self.salary)
学生类Student代码如下:
class Student(SchoolMember): def __init__(self, name, age, marks): SchoolMember.__init__(self, name, age) self.marks = marks print 'Initialized Student: {}'.format(self.name) def tell(self): SchoolMember.tell(self) print 'Marks: "{:d}"'.format(self.marks)
调用的代码如下:
t = Teacher('Mrs. Shriviya', 40, 3000) s = Student('Swaroop', 25, 75) print '' members = [t, s] for member in members: member.tell()
运行后结果如下:
---------------------------------------------------------------
Initialized SchoolMember:Mrs. Shriviya
Initialized Teacher:Mrs. Shriviya
Initialized SchoolMember:Swaroop
Initialized Student: Swaroop
Name:"Mrs. Shriviya" Age:"40"
Salary: "3000"
Name:"Swaroop" Age:"25"
Marks: "75"
---------------------------------------------------------------
注意:
java和python中继承的区别:
java中a.class继承了b.class,那么在子类a的构造函数中,无论什么情况,都会自动的调用父类b的构造函数。
而python的子类,如果子类,如Teacher类,已经写了构造函数__init__(),则需要显示的调用父类的构造函数__init__(self),否则不会调用。
但如果子类,Teacher类,并没有再定义构造函数__init__(),那么会默认的调用父类的构造函数。
多重继承:如果类定义的时候,
class Teacher(class1,class2...),写了多个继承元组,这种就是多重继承。
相关推荐
这份每日学习计划将帮助你系统地掌握Python编程,为进入顶级科技公司奠定坚实基础。以下是你需要关注的关键知识点: 1. **Python基础知识**: - **语法与数据类型**:学习Python的基本语法,包括变量、数据类型...
Python机器学习项目开发实战案例研究_预测雅虎的每日调整的收盘价_案例解析实例详解课程教程.pdf
"Python每日作业"这个标题暗示了这可能是一个学习资源包,包含了用于日常练习或教学的Python代码示例。文件列表中的"zgl_resource"可能是资源文件夹或者一个特定的Python文件,里面可能包含了各种函数、类或者问题...
这些库使得Python成为数据科学和机器学习的理想选择。 在"sequencial"这个标签中,我们可以理解为涉及到了序列数据的处理。序列数据通常表现为时间序列,其中每个观测值都有一个特定的时间戳。在财务数据中,如每日...
Python是一种广泛使用的高级编程语言,...总之,Python的"每日早安"程序可以通过结合基础编程概念、时间日期操作、定时任务和外部服务交互来实现。通过不断学习和实践,你可以创建出更加复杂和个性化的自动问候程序。
"Python-百日机器学习编程计划"是一个针对初学者到进阶者的系统性学习路径,旨在通过100天的持续实践,帮助学习者掌握Python编程基础以及机器学习的核心概念和算法。在这个计划中,你将逐步深入到数据预处理、模型...
Python统计机器学习每日作业
Python每日一题.pdf 本资源摘要信息涵盖了Python编程语言的各种知识点,涉及到图像处理、数据处理、文件操作、数据库交互、爬虫、数据分析、XML和Excel文件操作等多个方面。 1. 图像处理:题目0000和0010涵盖了...
在Python编程语言中,定时执行任务是一项常见的需求,例如自动备份数据、监控系统状态或运行数据分析等。Python提供了多种方式来实现定时任务...在开发过程中,可以参考提供的视频教程(BV1tR4y1W7ec)进行学习和实践。
此外,学习计划可能会规划每日或每周的学习目标,帮助学习者有序地掌握Python知识。 "python_work"可能是一个文件夹,包含各种Python练习项目,让学习者有机会将所学理论应用于实际编程。这些项目可能涉及文本处理...
每日调仓是强化学习策略的关键部分,智能体会根据当前市场状态和学习到的策略,决定买入、持有或卖出哪些股票,以期望获得最大的长期回报。 构建投资组合是投资策略的核心,它涉及到资金分配、风险控制和收益最大化...
python基础学习资料,包含每日的题目以及答案。学习资料简介: Python开发环境搭建,Python语法规则,学生管理系统。 目录:1.计算机组成原理和Python基础语法知识;2.判断语句和循环语句;3.容器:字符串、列表、...
Python学习:实战代码Demo案例集 解锁Python编程新境界,从实战出发,直击技术核心。本资源精心汇集了一系列Python实战代码Demo案例,不仅涵盖基础语法到高级特性的全面应用,更深度融合前端HTML技术,展现Web开发...
2. **列表、元组与字典**:Python的列表(list)是动态数组,元组(tuple)是不可变序列,字典(dict)则是键值对的集合。学习者需要掌握它们的创建、访问、修改、删除等操作,以及切片、遍历、排序等技巧。 3. **...
标题中的“Python-利用墨墨背单词的分享功能拿每日20个的单词上限奖励多线程”揭示了本主题的核心:使用Python编程语言来自动化完成墨墨背单词应用的每日分享任务,以获取额外的单词学习额度。这涉及到Python在实际...
02月03日 Python每日一题.mp42020年蓝桥杯培训教程,每日一练,备赛冲刺必备;适合蓝桥杯备赛学生和入门学习python的人群,适合做教学案例,适合自媒体教程。
【资源说明】基于Python实现的每日发送测试人员缺陷情况到飞书群的机器人源码+使用说明.zip# 环境要求|环境|版本||-|-||python|3.7.4||pip|22.0.4| 更新pip```pythonpip install --upgrade pip``` 创建虚拟目录```...