目录
1.类的继承
继承这个词很好理解,比如你继承了亿万家产,什么都没干一夜暴富。类的继承也是如此,子类继承父类,什么都没干就有了父类所有的属性和方法。
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各种各样的语言')
class Chinese(Human):
pass #pass是空语句,表示跳过,什么都没有。
Xiaolang = Chinese()
Xiaolang.walk()
print(Xiaolang.arms)
输出:
直立行走
2
2.类的多层继承
继承不只是子类继承父类的属性的方法,子类也能继承父类的父类的属性和方法。
class A: |
---|
class B(A): |
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各种各样的语言')
class Chinese(Human):
pass #pass是空语句,表示跳过,什么都没有。
class ShanDong(Chinese):
pass
Xiaolang = ShanDong()
Xiaolang.walk()
print(Xiaolang.arms)
输出:
直立行走
2
3.类的多重继承
除了继承一个类,还可以同时继承多个类。语法如下:
class 类A(类B, 类C, 类D): |
以出生在中国山东的小浪宝宝为例:
class Chinese:
hair = '黑头发'
skin = '黄皮肤'
def speak(self):
print('说汉语')
class Shandong:
arms = 2
legs = 2
def speak(self):
print('讲山东方言')
class Human(Chinese, Shandong):
pass
Xiaolang = Human()
Xiaolang.speak()
print(Xiaolang.hair)
print(Xiaolang.arms)
输出:
说汉语
黑头发
2
Human 类继承了 Chinese 类和 ShanDong 类的所有属性和方法,但是两个类都有 speak 的方法,Human 类只继承了 Chinese 的。这是因为class Human(Chinese, ShanDong):中的 Chinese 靠前,调用实例的属性和方法时会优先在子类中查找,找不到再从左到右依次查找继承的父类,直到找到,如果找不到会报错。
4.类的定制
你可能会有疑问,既然子类可以继承父类的所有属性和方法,它俩是一样的,为什么不直接使用父类呢?因为:类除了可以继承以外,还可以定制。在父类的基础上做以下两点定制:
1.创建新的属性和方法。(新增)
2.修改继承自父类的属性和方法。(重写)
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
class Chinese(Human):
hair = '黑头发'
skin = '黄皮肤'
def speak(self):
print('说汉语')
def eat(self):
print('吃馒头')
Xiaolang = Chinese()
print(Xiaolang.arms)
Xiaolang.walk()
Xiaolang.speak()
Xiaolang.eat()
输出:
2
直立行走
说汉语
吃馒头
Chinese 类在 Human 类的基础上新增了 skin 属性和 eat() 方法,并且 Chinese 类自己的 hair 属性和 speak() 方法覆盖了 Human 类中对应的属性和方法,这就是类的定制的两个特点:新增和重写。
新增 | 继承父类的属性和方法的基础上添加自己独有的属性或方法 |
---|---|
重写 | 在继承父类的属性和方法的基础上重写父类的属性或方法 |
《Python——类(__init__初始化 、__str__ 方法的使用及面向对象和向过程的区别)》
《Python——类(与实例区别、创建、调用、self的作用)》
加上本文《Pthon——类(类的继承、多层继承、多重继承、定制)》
在使用类时应特别注意:
1)定义类的方法时,第一个参数 self 不能丢,调用方法时忽略;
2)self 作用是代替实例本身,在类种访问类的属性和方法;
3)初始化方法 __init__() 在类实例化时会自动执行,一般用于类属性的初始化;
4)子类可以继承父类的所有属性和方法,并且可以定制自己的属性和方法。