Python类(4)类的继承

类的继承格式

class 子类(基类):
	pass

基类(父类): 被继承者(先辈)
子类:继承者(后辈)

如果没有基类,就用object
比如,我们前面几节课的内容,都是直接继承自object这个基类的.理论上,所有的类都是object的子类
可以用__base__属性查看子类的父类
查看子类的父类

class 子类(object):
	pass

print(子类.__base__)

输出:

python 定义类 继承object python类的继承举例_继承

查看子类的父类的第二个示例

class 子类(object):
	pass
class 孙子类(子类):
    pass
print(孙子类.__base__)

输出:

python 定义类 继承object python类的继承举例_类_02

除了这样的单继承之外,还可以多继承
多继承写法:

class 子类(父类,母类):
	pass

这里只是举了个例子,有两个父类,也可以是三个,四个,五个
这里不再举例了,有兴趣的同学可以自行尝试

继承了什么

继承的目的有2个:

  • 继往
  • 开来

继往:就是原来有的,我都有
开来:就是原来没有的,我也可以有

继承的基本使用:

class A(object):
    def __init__(self):
        self.name = "张三"

    def move(self):
        print("我可以移动")

    def swim(self):
        print("游泳我也会哦")

class B(A):
    def __init__(self):
        super().__init__()
        self.age = 10

    def jump(self):
        print("我还可以跳")

    def move(self):
        print("我的移动是飞哦")


b = B()
print(b.name)
print(b.age)
b.move()
b.jump()
b.swim()

python 定义类 继承object python类的继承举例_python_03

代码分析:
A:是基类
B:是子类

A有一个实例属性name, 两个实例方法move(), swim()
B继承自A,自建了一个实例属性age, 一个实例方法jump(),改写了move()方法

从效果图可以看出来
b有name属性, 有age属笥
b的jump(),swim()方法
但是move()方法与A中自的那个move()方法是不一样的.这个过程称为重写(重载)

总结

  1. 子类继承父类时,父类可以有一个或多个
  2. 子类继承父类时,会把父类的实例属性,实例方法都继承过来
  3. 子类如果对父类的行为(方法)不习惯,可以选择改良(重写)
  4. 子类如果有构造函数,父类的构造函数将不会被自动调用,需要手动调用super().init()
  5. 如果子类有多个父类,在使用super().init()方法调用父类的构造函数时,会按照父类的顺序调用第一个有构造函数的父类的构造函数.
  6. 子类可以对父类没有想到的东西加以添加(子类可以新增属性,方法)