封装,接口,多态

1.什么是封装

封装指的是隐藏对象的属性和实现细节,仅对外公开接口,控制程序中属性的访问权限;

python中的权限分为两种

1.公开 外界可以直接访问和修改

2.私有 外界不能直接访问和修改,在当前类中可以直接修改和访问

2.为什么需要封装

一.封装属性

对于属性而言,封装就为了限制属性的访问和修改,其目的是为了保护数据安全

例如:

学生对象拥有,姓名,性别,年龄,和身份证号,分数;其中身份证是一个相对隐私的数据,不应该让外界访问到;

分数属性,是一个非常关键的数据,决定学员能不能正常毕业,不应被随意修改;

二.封装方法

一个大的功能很多情况下是由很多个小功能组合而成的,而这些内部的小功能对于用户而言是没有意义的,所以封装方法的目的是为了隔离复杂度;

例如:

电脑的开机功能,内部需要启动BIOS,读取系统配置,启动硬盘,载入操作系统,等等一系列复杂的操作,但是用户不需要关心这些实现逻辑,只要按下开机键等待开机即可;

3.如何封装

在属性名前添加两个下划线__,将其设置为私有的

1.封装数据属性实例:网页中折叠

class Student:
    def __init__(self,name,gender,age,id,score): # 初始化函数
        self.name = name
        self.gender = gender
        self.age = age
        self.__id = id  # 将id设置为私有的
        self.__score = score # 将score设置为私有的
    def test(self):
        print(self.__id)
        print(self.__score)
​
        
stu = Student("Jack","man",20,"320684198901010001",780)
#1.访问私有属性测试
#print(stu.id) #    直接访问到隐私数据
#print(stu.__id) # 换种写法
#以上两行代码均输出相似的错误 
#Traceback (most recent call last):
#  File "/Users/jerry/PycharmProjects/备课/写课件/test.py", line 102, in <module>
#    print(stu.id)
#AttributeError: 'Student' object has no attribute 'id'
#错误含义 在Student类的对象中没有一个id或__id属性
​
#2.修改私有属性测试
stu.score = 1 # 直接修改私有属性 由于语法特点,相当于给stu对象增加score属性
stu.__score = 2 #   直接修改私有属性 由于语法特点,相当于给stu对象增加__score属性
print(stu.score)
print(stu.__score)
#输出 1 
#输出 2
​
#看起来已经被修改了 调用函数来查看私有属性是否修改成功
stu.test()
#输出 320684198901010001
#输出 780
# 私有的数据没有被修改过

思考:封装可以明确地区分内外,封装的属性可以直接在内部使用,而不能被外部直接使用,然而定义属性的目的终归是要用,外部要想用类隐藏的属性,需要为其提供接口,让外部能够间接地使用到隐藏起来的属性,那这么做的意义何在?

答:可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制。

class Teacher:
    def __init__(self,name,age):
        # self.__name=name
        # self.__age=age
        self.set_info(name,age)
​
    def tell_info(self):
        print('姓名:%s,年龄:%s' %(self.__name,self.__age))
    def set_info(self,name,age):
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值