类的继承
基本概念
面向对象三要素之一,继承inheritance
人类和猫类都继承自动物类.
个体继承自父母,继承了父母的一部分特征,但也可以有自己的个性.
在面向对象的世界中,从父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码,多复用.子类可以定义自己的属性和方法.
看一个不用继承的例子
class Animal:
def shout(self):
print('Animal shouts')
a = Animal()
a.shout()
class Cat:
def shout(self):
print('Cat shouts')
c = Cat()
c.shout()
上面的两个类虽然有关系,但是定义是并没有建立这种关系,而是各子完成定义
动物类和猫类都有吃,但是他们的吃有区别,所以分别定义.
class Animal:
def __init__(self,name):
self._name = name
def shout(self):
print('{} shouts'.format(self.__class__.__name__))
@property
def getname(self):
return self._name
a = Animal('moster')
a.shout()
class Cat(Animal):
pass
cat = Cat('garfield')
cat.shout()
print(cat.getname)
class Dog(Animal):
pass
dog = Dog('ahuang')
dog.shout()
print(dog.getname)
上例可以看出,通过继承,猫类,狗类不用写代码,直接机车个了父类的属性和方法
-
继承
class Cat(Animal)这种形式就是从父类继承,括号中写上继承的类的列表.
继承可以让子类从父类获取特征(属性和方法) -
父类
Animal就是Cat的父类,也称为基类,超类 -
子类
Cat就是Animal的子类,也称为派生类
定义
格式如下
class 子类名(基类1[,基类2,...]):
语句块
如果类定义时,没有基类列表,等同于继承自object.在Python3中,objact类是所有对象的跟基类.
class A:
pass
# 等价于
class A(objact):
pass
注意,上例在Python中,两种写法是不同的.
Python支持多继承,继承也可以多.
查看继承的特殊属性和方法有
特殊属性和方法 | 含义 | 示例 |
---|---|---|
__base__ | 类的基类 | |
__bases__ | 类的基类元组 | |
__mro__ | 显示方法查找顺序,基类的元组 | |
mro()方法 | 同上,返回列表 | int.mro() |
__subclasses__() | 类的子类列表 |