目录
继承
1. 继承允许开发者基于已有的类创建新的类
2. 如果一个类C1通过继承已有类C而创建,则将C1称作子类(sub class),将C称作基类、父类或超类(base class、super class)
3. 子类会继承父类中定义的所有属性和方法,另外也能够在子类中增加新的属性和方法。
4. 如果一个子类只有一个父类,则将这种继承关系称为单继承;如果一个子类有两个或更多父类,则将这种继承关系称为多重继承。
子类的定义
1. 定义子类时需要指定父类,其语法格式为:
class 子类名(父类名1,父类名2,,,)
语句
class Person:
def SetName(self, name):
self.name = name
class Student(Person):
def SetSno(self, sno):
self.sno = sno
class Teacher(Person):
def SetTno(self, tno):
self.tno = tno
class TA(Student, Teacher):
def SetTeacher(self, teacher):
self.teacher = teacher
if __name__ == '__main__':
stu =Student()
stu.SetSno('5349')
stu.SetName("小明")
print("学号:%s, 姓名: %s"%(stu.sno, stu.name))
t = Teacher()
t.SetTno('49353')
t.SetName("小红")
print("教工号:%s, 姓名: %s" % (t.tno, t.name))
# 输出
'''
学号:5349, 姓名: 小明
教工号:49353, 姓名: 小红
'''
方法重写
1. 方法重写是指子类可以对从父类中继承过来的方法进行重新定义,从而使得子类对象可以表现出与父类对象不同的行为。
举例
class Person:
def __init__(self, name):
self.name = name
def PrintInfo(self):
print("姓名:%s"%self.name)
class Student(Person):
def __init__(self, sno, name):
self.sno = sno
self.name = name
def PrintInfo(self):
print("学号:%s,姓名:%s" %(self.sno, self.name))
def PrintPersonInfo(person):
print("PrintPersonInfo函数中的输出结果", end='#')
person.PrintInfo()
if __name__ == '__main__':
p = Person('小明')
stu = Student('32057203', '小明')
p.PrintInfo()
stu.PrintInfo()
PrintPersonInfo(p)
PrintPersonInfo(stu)
# 输出
'''
姓名:小明
学号:32057203,姓名:小明
PrintPersonInfo函数中的输出结果#姓名:小明
PrintPersonInfo函数中的输出结果#学号:32057203,姓名:小明
'''
多态:是指在执行同样代码的情况下,系统会根据对象实际所属的类去调用相应类中的方法。
鸭子类型
1. 在鸭子类型中,关注的不是对象所属的类,而是一个对象能够如何使用。
2. 在Python中编写一个函数,传递实参前其参数的类型并不确定,在函数中使用形参进行操作时只要传入的对象能够支持该操作程序就能正常执行。
举例
class Person:
def CaptureImage(self):
print("Person类中的CaptureImage方法被调用")
class Camera:
def CaptureImage(self):
print("Camera类中的CaptureImage方法被调用")
def CaptureImageTest(arg):
arg.CaptureImage()
if __name__ == '__main__':
p = Person()
c = Camera()
CaptureImageTest(p)
CaptureImageTest(c)
# 输出
'''
Person类中的CaptureImage方法被调用
Camera类中的CaptureImage方法被调用
'''
1、在执行同样代码的情况下,系统会根据对象实际所属的类去调用相应类中的方法,这个特性是类的( )。
A.封装性
B.继承性
C.多态性
D.自适应性
正确答案:C
解析:封装性、继承性和多态性是面向对象的三个重要特性。封装性是指将一个数据的属性和方法封装在一起;继承性是指基于已有类创建新类,新类继承已有类中的属性和方法;多态性是指执行相同代码时,能够根据对象实际所属的类去调用相应类中定义的方法。
2、方法重写是指子类可以对从父类中继承过来的方法进行重新定义,从而使得子类对象可以表现出与父类对象不同的行为。
A.正确
B.错误
正确答案:A
解析:方法重写就是在子类中对父类继承过来的方法进行重新定义,这样通过子类对象和父类对象调用同一方法时就会执行不同的代码、表现出不同的行为。