Python继承和多态

26 阅读2分钟

继承

在python3中,默认的基类如果括号没有,那么继承自python的object类

class A:
    pass
class B(A):
    pass

可以通过__bases__方法查看基类

继承最大的好处就是获得了父类全部的功能

当子类被创建的时候,子类会执行自己的__init__构造函数,如果子类未定义自己的构造方法函数,那么就会使用父类的构造函数


在程序设计中,继承是指子类自动享有父类的属性和方法,并可以追加属性和方法的一种机制。它是实现代码共享的重要手段,可以使软件更具有开放性,可扩充性,这是信息组织与分类的行之有效的方法,也是面向对象的主要优点之一

继承又分为单继承多重继承,单继承非常简单,指子类只能继承一个父类的属性和方法;

多继承

class A:
    def __init__(self):
        print('this is A\'s __init__')
class B:
    def __init__(self):
        print('this is B\'s __init__')
class C(A,B):
    pass
a = A() # this is A's __init__
b = B() # this is B's __init__
c = C() # this is A's __init__

class C(B,A):
    pass
c = C() # this is B's __init__

如果子类调用一个自身没有的属性,那么他会在这一堆父亲里来找

查找顺序将是继承顺序的从左到右,然后是从下到上,层层找到父类 (也可以称得上是就近原则

多态

Python中,处处都有多态的影子,比如1+1与'1'+'1'

得到的结果及运算意义是截然不同的,这些都是属于多态的操作

  • 多态:跟据数据的类型执行不同的操作

  • 实现多态:在面向对象中实现多态,通过对子类重写父类中已有函数

class A:
    def func(self):
        print('A func')
class B(A):
    def func(self):
        print('B func')
b = B()
a = A()
b.func()	# B func
a.func()	# A func

定义好了一个函数,他接收一个实例,然后调用这个实例对象中的func函数

def show(var):
    var.func()

通过传入同类实例进行调用

show(a) # A func
show(b) # B func

你会发现,结果不同,这就起到了在不同情况下,采用不同的方式来运行函数,实现了多态