Python是一种解释性的高级编程语言,支持多种编程范例,其中一项重要的特性就是继承。继承是面向对象编程的基石之一,它允许子类继承父类的属性和方法,并在此基础上进行扩展或者重写。本文将从多个方面介绍Python继承的几种方式,包括传统的经典类继承、新式类继承、多重继承、Mixin模式等。
一、经典类继承
Python早期的版本中,类的继承方式可以分为经典类继承和新式类继承。在经典类继承中,类不需要显式地继承一个基类,它默认的基类是object之前的类。经典类继承被Python3完全废弃,因此在Python3中无法使用经典类继承的方式来定义类。
class A: def method(self): print('method of class A') class B(A): pass b = B() b.method()
在上面的例子中,类B继承了A类的method()方法,因此可以通过b.method()来调用method()方法。经典类继承的缺点在于继承顺序较为混乱,同时也不支持super()方法。
二、新式类继承
Python2.2版本引入了新式类继承,它取消了默认基类,并且所有类都直接或间接的继承自object类。同时,新式类继承还带来了一些新特性,例如:属性、描述符、staticmethod()等。
class A(object): def method(self): print('method of class A') class B(A): pass b = B() b.method()
与经典类继承不同,新式类继承需要显示的继承object类。
三、多重继承
Python允许一个类继承多个父类,这种继承方式称为多重继承。多重继承在某些情况下十分有用,比如实现ADT抽象数据类型。
class A: def method(self): print('method of class A') class B: def method(self): print('method of class B') class C(A, B): pass c = C() c.method()
在这个例子中,类C继承了类A和类B的method()方法,由于继承的顺序是A、B,因此当调用c.method()时,输出的是类A的method()方法。
四、Mixin模式
Mixin模式是横向继承的一种方式,它可以实现类的组合。Mixin类是指只提供单一功能的类,用于混入到其他类中。Mixin类通常由于接口类相似,但是不会用来实例化对象的。
class MyMixin: def method(self): print('method of MyMixin') class A: pass class B(A, MyMixin): pass b = B() b.method()
在这个例子中,类B继承了类A和MyMixin类的method()方法,由于MyMixin类不会用来实例化对象的,因此只是提供了一个额外的方法。Mixin模式最大的好处在于其灵活性和可重用性。