Python3笔记039 - 7.5 继承

第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
posted @ 2020-07-23 18:06  测试工匠麻辣烫  阅读(135)  评论(0编辑  收藏  举报