内容正文:
少儿编程课
1
面向对象编程进阶
这一节,我们学习面向对象的三大特征:封装、继承和多态
3
封装
继承
多态
面向对象
三大特征之封装
4
什么是封装呢?我们用前面Orc类来说:
class Orc:
def __init__(self, name, hp, lv):
self.name = name
self.hp = hp
self.lv = lv
def desc(self):
print('我是%s,血量为:%s,等级为:%s' %
(self.name, self.hp, self.lv))
orc = Orc('史瑞克', 200, 2)
orc.desc()
在面向对象的编程思想中,将属性和方法隐藏在类中的行为,就称为封装。
属性和方法通过对象调用,对于调用者来说,隐藏了具体的实现细节。
5
封装除了隐藏细节外,还有另一个目的:数据的安全
就像机箱的目的是为了保护电脑内部的主板、硬盘、处理器、电源等
6
那么对于当前的Orc类来说,如何保证内部属性数据的安全呢?
class Orc:
def __init__(self, name, hp, lv):
self.name = name
self.hp = hp
self.lv = lv
def desc(self):
print('我是%s,血量为:%s,等级为:%s' % (self.name, self.hp, self.lv))
orc = Orc('史瑞克', 200, 2)
# 语法上没问题,但是不符合实际情况!
orc.hp = -200
orc.desc()
这就好比,如何能保证电脑内部硬盘的安全,同时又能够让外部能够访问到硬盘
7
对于电脑来说是机箱+USB接口,对于类来说,是私有+getter/setter
1
属性前加上__,就变成了了私有属性
class Orc:
def __init__(self, name, hp, lv):
self.__name = name
self.__hp = hp
self.__lv = lv
def desc(self):
print('我是%s,血量为:%s,等级为:%s' %
(self.__name, self.__hp, self.__lv))
orc = Orc('史瑞克', 200, 2)
orc.desc()
# 此时打印,会报错
print(orc.__hp)
Traceback (most recent call last):
File "C:/…/demo01.py", line 13, in <module>
print(orc.__hp)
AttributeError: 'Orc' object has no attribute '__hp'
此时运行(类外部访问),就会报错
2
外部如何访问属性呢?比如获取当前的血量
class Orc:
def __init__(self, name, hp, lv):
self.__name = name
self.__hp = hp
self.__lv = lv
def desc(self):
print(‘我是%s,血量为:%s,等级为:%s’ %
(self.__name, self.__hp, self.__lv))
# get方法
def get_hp(self):
return self.__hp
orc = Orc('史瑞克', 200, 2)
orc.desc()
# get方法的使用
print(orc.get_hp())
这就是所谓的属性的getter方法
8
那又该如何在外部修改属性的值呢?比如血量减少之后hp的重新赋值
3
这就是和getter对应的setter方法,类定义如下:
外部访问过程如下:
class Orc:
def __init__(self, name, hp, lv):
self.__name = name
self.__hp = hp
self.__lv = lv
def desc(self):
print('我是%s,血量为:%s,等级为:%s' %
(self.__nam