继承
在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
你会发现,结果不同,这就起到了在不同情况下,采用不同的方式来运行函数,实现了多态