面向对象编程
OOP
有以下三个特征,本篇札记中主要讨论继承
的知识点:
- 继承
- 多态
- 封装
继承
概念
继承是面向对象设计中一个重要的概念。如果一个类A继承自另一个类B,则称B是A的父类或者
超类
,或者A是B的子类
。
继承可以使得子类具有父类的属性和方法,不再需要重新编写方法。同时,子类还可以重新定义自己的属性和方法,或者重新写某些方法,即覆盖掉父类的属性和方法,继承的特点:
- 在
Python
中所有的类都是object
的子类,即所有的类都继承自object
。 - 子类继承父类的所有方法和属性
- 实现代码重用,子类还可以定义自身特有的属性和方法
- 继承最主要的功能是实现
多态
,多态的重要性是实现接口的继承性
在Python
中由于存在Duck Type
,接口定义的重要性被降低了,继承的作用也被大大降低。
单继承
单继承就是指只从一个父类那里继承,即只有一个父类。通过一个简单的例子来了解继承:
class A:
pass
class B(A): # B继承自A
pass
B.__base__ # 类的特殊属性__base__:查看一个类的父类
image.png
- A是父类,B是子类
- 所有的类都是object的子类,
object类不必写出来
;如果继承别的类,则必须写出来 -
__ base__
属性查看某个类的父类
通过一个例子来真正了解下继承:
import random # 导入随机模块
class A: # 定义一个A类
def __init__(self, number): # 初始化函数,传入参数number
num = random.randint(1, 101) # 在1到101之间生成一个随机数
if num > number: # 判断传入参数和随机数的大小
print("{} is bigger than number".format(num))
else:
print("{} is smaller than number".format(num))
class B(A): # B继承自A
pass
res = B(50) # 因为B继承了A类,A类需要传入参数,此处直接给B类传入了参数50
image.png
image.png
- 例子中父类
A
中增加了初始化函数__init__()
- 建立实例的时候执行初始化函数
-
B
继承了A
,也就拿到了初始化函数 - 当建立
res = B(50)
实例的时候,执行了父类的初始化函数,就是继承
网友评论