封装、继承和多态是面向对象的三大特点;直接看Python中是怎么实现的
封装
首先定义一个 Human 类,初始化类的属性和方法:
class Human:
def __init__(self):
# 这是可以公共知道的属性
self.age = None # 年龄
self.height = None # 身高
# 这是私有属性,如持有多少钱
self.__money = None
# 为了让自己使用自己的钱,要设置方法来获取
def getMoney(self):
return self.__money
# 设置money值
def setMoney(self, money):
if money > 0:
self.__money = money
def speak(self):
pass
这样我们就可以说这个类完成了封装。可以看出封装就是把众多属性和方法合在一起,形成一个功能。这是一种编程思想。
继承
前面我们定义了 Human 类,现在我们还想定义一个类,它可以使用 Human 类的功能,同时也有自己的功能,可以使用继承:
class LocalHuman(Human):
# 这是这个类独有的功能
def speak(self):
print('我会说本地话。')
运行测试代码:
if __name__ == '__main__':
# 创建LocalHuman实例
local_human = LocalHuman()
# 测试
# 这是继承自Human类的
print(local_human.height)
print(local_human.age)
print(local_human.getMoney())
# 这是自己的
local_human.speak()
结果如下: 这样的过程就是继承,当需要使用的功能有部分重复时,我们优先使用继承的方法,避免再一次造出重复的功能。
多态
定义一个 Rich 类,它继承 Human 类:
class Rich(Human):
def __init__(self):
self.age = 1
self.height = 10
# 部分属性和父类不同
self.setMoney(100000000)
def speak(self):
print('我喜欢极限运动!')
定义一个函数接收 Human 对象,来展示 Human 对象的不同形态:
def show(h: Human):
print(h.getMoney())
h.speak()
测试代码:
if __name__ == '__main__':
# 创建LocalHuman实例
local_human = LocalHuman()
# 创建Rich实例
rich = Rich()
# 测试
# 调用show 函数,显示他们的不同
show(local_human)
print('-' * 31) # 分隔符
show(rich)
运行结果:
可以看出,同一个函数传入父类是Human类,可以表示出多种形态,这就是Human类的多态。