第7章 面向对象程序设计
- 7.1 面向对象概述
- 7.2 类的定义
- 7.3 类的实例化
- 7.4 访问限制
- 7.5 继承
- 7.6 封装
- 7.7 多态
- 7.8 装饰器
- 7.9 特殊方法
7.5 继承
我们每一个人都从祖辈和父母那里继承了一些体貌特征,但是每个人却又不同于父母,因为每个人都存在自己的一些特性,这些特性是独有的,在父母身上并没有体现。
class ClassName(baseclasslist):
'''类的帮助信息'''
statement
参数说明
baseclasslist:要继承的基类,可以有多个,用逗号分隔,不指定,将继承object类
baseclasslist称为基类或父类,ClassName称为派生类或子类
# 单继承实例:子类Student继承父类People
# 父类定义
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print("%s 说: 我 %d 岁。" % (self.name, self.age))
# 子类定义,既没定义属性也没定义方法
class Student(People): # People父类名,Student是子类名
pass
s = Student('John', 10) # Student类实例化
s.speak() # 调用父类的speak方法
output:
John 说: 我 10 岁。
python 3的继承机制
-
子类在调用某个方法或变量的时候,首先在自己内部查找,如果没有找到,则开始根据继承机制在父类里查找。
-
根据父类定义的顺序,以深度优先的方式逐一查找父类,Python会从左至右搜索父类中是否包含该方法。一旦查找到则直接调用,后面不再继续查找。!
# 多继承实例:
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print("People类的speak方法")
class Teacher:
def __init__(self, grade):
# 调用父类的实例化方法
self.grade = grade
def speak(self):
print("Teacher类的speak方法")
class Student(People, Teacher):
def __init__(self, name, age, grade, sex):
# 调用父类的实例化方法
People.__init__(self, name, age)
Teacher.__init__(self, grade)
self.sex = sex
def speak(self):
print(self.name, self.age, self.grade, self.sex)
s = Student('John', 10, 30, "male")
s.speak()
output:
John 10 30 male
# 拓展:所有对象之根,object就所有类的祖先,都默认继承object类
o = object()
print(type(o))
output:
<class 'object'>
# 拓展:父子关系鉴定
# 父类定义
class People(object): # object是父类名,People是子类名
pass
# 子类定义
class Student(People): # People父类名,Student是子类名
pass
print(issubclass(Student, People))
print(issubclass(People, object))
output:
True
True