• Python3笔记039


    第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
    
  • 相关阅读:
    汉诺塔实现笔记
    python-nmap的函数学习
    字符串匹配的KMP算法(转)
    QT下的贪吃蛇
    PentestBox在win10里打不开工具
    Dalvik虚拟机执行流程图
    用dx生成dex时遇到class name does not match path
    python3 小工具
    python3的Cryptodome
    前端学习笔记 day02 CSS
  • 原文地址:https://www.cnblogs.com/infuture/p/13352846.html
Copyright © 2020-2023  润新知