zoukankan      html  css  js  c++  java
  • Python学习笔记(15)-继承、多态

    继承

    单继承

    一个类A拥有一个类B的属性和方法,类A称作子类或派生类,类B称作父类或基类

    示例:

    class Animal(object):
        def __init__(self):
            self.color ="黑色"
        def run(self):
            print("---跑---")
    class Cat(Animal):
        pass
    tom = Cat()
    print(tom.color)
    tom.run()

    运行结果:

    黑色
    ---跑---

    说明:

    1、示例中我们称Cat类继承了Animal类,Cat类称为子类或派生类,Animal类称为父类或基类

    2、子类在继承的时候,在定义类时,小括号()中为父类的名字,父类的属性和方法会继承给子类

    3、示例中Animal没有继承其他类的时候默认继承object类,object类是所有类的基类

    4、虽然子类Cat没有定义__init__、run方法,但是父类Animal有,所以在子类继承父类的时候__init__、run方法就被继承了,所以在创建tom对象时,默认执行了那个继承过来的__init__、run方法,所以执行结果输出了黑色、---跑---

    注意:

    父类中的私有属性、私有方法无法被继承

    示例:

    class Animal(object):
        def __init__(self):
            self.__color ="黑色"
        def __run(self):
            print("---跑---")
    class Cat(Animal):
        pass
    tom = Cat()
    print(tom.color)
    tom.run()

    运行结果:

    Traceback (most recent call last):
    File "F:/untitled/Python_jichu/继承.py", line 9, in <module>
    print(tom.color)
    AttributeError: 'Cat' object has no attribute 'color'

    多继承

    子类拥有多个父类的继承关系称作多继承

    示例:

    class A(object):
        def __init__(self):
            self.color ="黑色"
        def run(self):
            print("---跑---")
    class B(object):
        def jump(self):
            print("---跳---")
    class C(A,B):
        pass
    c = C()
    print(c.color)
    c.run()
    c.jump()

    运行结果:

    黑色
    ---跑---
    ---跳---

    说明:

    子类在继承多个父类的时候,在定义类时,小括号()中为父类们的名字,中间用逗号隔开,父类们的属性和方法会继承给子类

    当多个父类存在同名的方法名称时,匹配顺序为print(c.__mro__)输出的结果顺序

    (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)

    多态

    定义功能时不知道这个功能调用的是哪一个方法,代码真正执行到调用时才根据传入的数据确定调用的是哪个方法

    示例:

    class A(object):
        def run(self):
            print("---跑1---")
    class B(object):
        def run(self):
            print("---跑2---")
    def test(temp):
        temp.run()
    a = A()
    b = B()
    test(b)
    test(a)

    运行结果:

    ---跑2---
    ---跑1---

    说明:

    定义test函数时并不知道函数需要掉A中的run方法还是B中的run方法,当执行到test()时才根据传入的对象确定调用哪个类中的run方法

  • 相关阅读:
    吴裕雄--天生自然WEB前端开发实战--Ajax
    吴裕雄--天生自然WEB前端开发实战--jQuery
    吴裕雄--天生自然WEB前端开发实战--数据验证
    吴裕雄--天生自然WEB前端开发实战--DOM编程
    cpodeblocks+freeglut+glew 用到的库文件上传到附件 亲测可用
    haizei c++ 试听课程知识点 day2 --第2讲
    vim命令 转
    hizei c++ 试听课程知识点 day2
    haizei c++ 试听课程知识点 day1
    C#连接SQL Server时提示'用户登录失败'
  • 原文地址:https://www.cnblogs.com/lidongaistudy/p/9583845.html
Copyright © 2011-2022 走看看