面向对象三大特征之--封装--day24

面向对象三大特征之封装
1.什么是封装

生活中的封装 类似工厂 拿个纸箱,装入一堆产品,拿胶带封起来
在程序中,封装指的是将内容隐藏起来, 在面向对象中有什么内容可以被隐藏?,就是属性和方法

注意:封装绝不是单纯的隐藏
封装是指,隐藏内部实现细节,对外提供使用接口

2.为什么要封装
1.提高安全性 (例如:cpu频率 缓冲区大小,电脑,手机,汽车,收音机)
对于封装属性而言,是通过给访问和修改增加额外的逻辑判断来实现的
对于封装方法
2.封装是为了明确区分内部和外部

 

3.如何使用封装
在属性或方法名称前 加上两个下划线,就可以将其设置为私有的
另外补充: python中权限只有两种,公开(谁都能访问)的和私有(只有自己能访问)的
属性的封装,通过需要提供相应的设置器和访问器

4.什么时候用
5.封装的实现原理

6.封装的特点
被隐藏的内容 在内部是可以直接访问,外部无法访问
class Student:
def __init__(self,name,sex,age,idCard):
self.name = name
self.age = age
self.sex = sex
self.__idCard = idCard
def say_hi(self):
print("hello i am %s age is : %s sex is %s" %
(self.name,self.age,self.sex))

def test(self):
print(self.__idCard)

# 可以使用方法 将内部封装的内容返回出去
def get_idCard(self):
return self.__idCard

# 如果直接返回的话 就没必要设置隐藏了 ,谁都可以通过调用方法来获取,我们再方法中加上自己的判断逻辑
def get_idCard2(self,pwd): # 如果密码正确我就给你身份证号码
if pwd == "1111":
return self.__idCard
else:
print("滚 你没有资格知道我的身份证...")

def set_idCard(self,pwd,new_idCard): # 如果密码正确就允许修改
if pwd == "1111":
self.__idCard = new_idCard
else:
print("滚 你没有资格修改我的身份证...")

stu = Student("步惊云","男",20,"3206661998445132")
stu.say_hi()

# print(stu.__idCard) # 加上__也访问不了

# stu.test() # 但在内部是可以访问的

# idcard = stu.get_idCard()
# print(idcard)
# 即实现了隐藏 又提供了访问的接口 这就是封装的用法
# idcard = stu.get_idCard2("1111")
# print(idcard)


# 身份证填错了 要修改
# stu.__idCard = "123" # 这样是无法修改原来的身份证信息的 而是添加了新的属性
#
# print(stu.__idCard)
# print(stu.get_idCard2("1111"))

# 调用方法来修改隐藏的属性
stu.set_idCard("1111","xxxxxxxxxxxxxxxxxx")

print(stu.get_idCard2("1111"))


# 总结:对于被隐藏的属性 访问和修改都需要通过方法 get用于获取 set用于设置(也称之为设置器和访问器)

posted @ 2018-12-17 20:32  WenChen-0o0  阅读(136)  评论(0编辑  收藏  举报