9 - 继承和多态
来源:互联网 发布:淘宝广告图在线制作 编辑:程序博客网 时间:2024/05/31 19:45
1. 继承的实现方法与注意事项
class ChildClass(ParentClass):
- 子类会继承父类的所有可访问的数据域和方法,它也可以定义自己的数据域和方法。
- 子类在
__init__
函数中需要调用父类的 __init__ 方法去初始化。常用的方法是:super().__init__()
(避免显示指向父类),不需要传递 self 参数。 - Python 允许从几个类派生出一个子类,称为多重继承
- 方法覆盖:子类可以重新实现父类的方法,方法时必须使用与父类一样的方法头。注意私有方法不可覆盖!
2. object类
Python 的所有类都派生自object类。如果定义一个类的时候没有指定它的父类,那么它的父类默认就是object类。
熟悉object类的方法是十分重要的,主要看以下四个方法:
__new__
创建对象的时候被自动调用,它随后会调用__init__
方法来初始化这个对象,一般只应该覆盖__init__
方法来初始化新类中定义的数据域__init__
__str__
返回一个描述该对象的字符串,默认返回信息如下:
loan = loan(1, 1, 1, "Smith")print(loan)<Loan.Loan object at 0x01B99C10>
这样的信息是没有太大意义的,通常应该覆盖这个__str__
方法,这样它就可以返回一些代表该对象的描述性的字符串了。
__eq__
如果两个对象相等,那么__eq__
返回的是True,但是这是根据内存的位置来确认的。如果要让两个数据域相同的对象时返回True,那么应该覆盖这个方法。Python中的许多像int、float、bool、string和list这样的内置类中,__eq__
方法被覆盖以使两个对象内容相同时返回True。
3. 多态和动态绑定
- 多态:子类的对象可以作为参数传递给需要父类类型参数的函数(子类代替父类),这样一个方法可以沿着继承链的几个类执行
- 动态绑定:运行时由Python动态的决定该调用那个方法
class Student: def __str__(self): return "Student" def printStudent(self): print(self.__str__())class GraduateStudent(Student): def __str__(self): return "Graduate Student"a = Student()b = GraduateStudent()a.printStudent()b.printStudent()
4.isinstance函数:判断一个一个对象是否是一个类的实例
用法如下:
isinstance(object, ClassName)
例如:
isinstance("abc", str)
将返回True
5.类之间的关系
- 关联
描述两个类之间的动作,如一个学生可以选修多门课程,一个课程可以被多位学生选中。这就说明Student类与Course之间的一种关联。
class Student: def addCourse(self, course): class Course: def addStudent(self, student): def setFaculty(self, faculty): class Faculty: def addCourse(self, course):
- 聚合和组合
反应两个类之间的归属关系,对 has-a关系进行建模。
一个学生有一个名字,一名学生有一个地址,一个地址可以被多个学生所拥有:
class Name: ...class Student: def __init__(self, name, addresss): self.name = name self.address = address ...class Address: ...
0 0
- 9 - 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 继承和多态
- 杭电acm-2045
- 8 - 列表
- STL学习之transform函数
- 自学安卓复习基础_之十一(在Activity中加载fragment的页面)
- ZOJ.1577 GCD & LCM【水,暴力】 2015/09/22
- 9 - 继承和多态
- 黑马程序员——集合框架(二) ——Map
- Git 学习(二):Mac OS X 下 Git 安装教程
- 重点几个基础问题
- 判断整数序列是不是二叉查找树的后序遍历结果
- 通过interface进行回掉的实现
- JavaScript 深度克隆
- oracle 客户端安装问题 ORA-12154: TNS: 无法解析指定的连接标识符
- hihocoder 1236