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方法

原文地址:https://www.cnblogs.com/lidongaistudy/p/9583845.html