百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

三十四、Python面向对象:"假"封装

off999 2024-10-01 14:07 46 浏览 0 评论

1.什么是封装?

众所周知,封装(Encapsulation)、继承(Inherit)和多态(Polymorphism)是面向对象的三大特征,它指的是将对象的状态信息隐藏在类定义的内部,不允许外界直接访问对象的内部信息,而是通过该类对外部暴露的方法来实现对类内部信息的访问和操作。

2.封装的好处

  • 对外隐藏类内部的实现细节;
  • 使用者仅通通过类定义时对外暴露的方法来访问数据,因此,可以在定义方法时添加控制逻辑,限制对属性的不合理访问;
  • 在用户通过方法设置或修改类的属性时,可以在方法上添加数据校验规则,可以保证数据的完整性和有效性;

3.怎样实现封装?

实现封装可以从以下两方面来考虑:

  1. 需要将对象的属性和实现细节隐藏起来,不允许外部直接访问和操作;
  2. 将方法暴露出来,让方法来控制这些属性的访问与操作;

4.Python类中实现封装

因为Python是解释型的语言,并没有像其它语言提供变量的修饰符,比如private, protected等,而是通过一种技巧,即Python内部的约定,给类成员命名以双下划线的开头,Python就会将它们隐藏起来。

class Dog:
    def get_name(self):
        return self.__name

    def set_name(self, name):
        if(len(name)<2):
            raise ValueError('狗的名字至少需要两个汉字')
        self.__name = name
    name = property(get_name, set_name)

    def __pee(self):
        print('我要尿尿了...')

# 实例化并调用
d = Dog()
# 尝试直接给变量赋值
d.name = '泰迪'
print(d.name)

#d.name ='狗'
#print(d.name) # ValueError: 狗的名字至少需要两个汉字

#d.__pee() # AttributeError: 'Dog' object has no attribute '__pee'

上面的例子中将Dog类的实例变量命名为__name, 这个实例变量就会被隐藏起来,这样,程序无法直接访问该实例变量,只能通过get_name, set_name这些方法来进行访问, 而get_name, set_name会添加控制逻辑,只有符合条件的name才允许被设置。

另外,对于隐藏的方法__pee(), 程序尝试执行,由于该方法在类的内部定义为隐藏,所以直接访问会报错。

5.为什么说Python中的封装是“假”封装?

其实,Python其实没有真正的隐藏机制,双下划线实现隐藏在Python中只是一种技巧, 因为对于加了双下划线的变量和方法名,Python会巧妙地改名这个名字,即会在你定义的双下划线变量或方法前再添加单下划线和类名。可以通过"对象名.__dict__"查看,或通过"对象名._类名__[方法名|变量名]"调用:

class Dog:
    def get_name(self):
        return self.__name

    def set_name(self, name):
        if(len(name)<2):
            raise ValueError('狗的名字至少需要两个汉字')
        self.__name = name
    name = property(get_name, set_name)

    def __pee(self):
        print('我要尿尿了...')

# 实例化并调用
d = Dog()
d.name ='泰迪'

# 通过下面的方法可以查看被隐藏的成员变量和方法
print(d._Dog__name)
d._Dog__name='藏獒'
print(d._Dog__name)
d._Dog__pee()

所以,从上面可以看出,Python并没有真正地实现“隐藏”机制,是一种“”封装,但是我们不推荐这样访问,通常也不会这么访问。

所以,如果需要隐藏变量或成员方法,可以使用以“双下划线”命名的这种方式,Python也推荐这种使用方式。

相关推荐

电脑蓝屏重新启动(电脑蓝屏重新启动快捷键)
  • 电脑蓝屏重新启动(电脑蓝屏重新启动快捷键)
  • 电脑蓝屏重新启动(电脑蓝屏重新启动快捷键)
  • 电脑蓝屏重新启动(电脑蓝屏重新启动快捷键)
  • 电脑蓝屏重新启动(电脑蓝屏重新启动快捷键)
恢复大师app下载(恢复大师app下载软件)

是真的。开心手机恢复大师是一款苹果手机数据恢复软件,可以恢复删除的微信聊天记录、短信、通讯录、备忘录、qq聊天记录等17种数据。我测试了一下,确实是可以恢复的。而且开心手机恢复大师是可以免费试用的,是...

windowsxp下载网站(windows xp download)

目前无法下载因为红色警戒XP电脑版是一款已经停止开发的游戏,官方已经停止了对其的支持和更新。虽然网上有一些模拟器可以运行该游戏,但是安装和使用相对困难,而且可能存在版权问题。建议玩家选择其他同类型的游...

没人用过的激活码没过期(没人用过的激活码没过期可以用吗)

迷你世界并不存在什么激活码的。《迷你世界》是一款高度自由的休闲类3D沙盒游戏,有着非常方便快捷的多人联机模式,只要有网络就能和各个地方的小伙伴们一起玩。这里没有等级和规则限制,没有规定的玩法,只有随心...

2017年联想笔记本电脑有几款

17年的笔记本电脑可以勉强安装一下win10系统试试。关键看你的内存有多少,内存大于4个G的话可以安装win10速度不会太慢。最好是安装win7系统,这样能发挥你这台电脑的所有的性能,你用起来也会感觉...

当前显卡排名(当下显卡排行)

101、Irispro5802、Iris62002、Iris52004、UHD630/6205、HD6306、HD5307、HD46008、HD44009、HD420010、HD40...

win10专业版激活变成企业版(win10专业版激活变成企业版怎么办)

win10永久激活密钥很少,一旦网上有分享,等你拿到时就超过期限了,一般是要购买。激活win10系统可以使用激活工具:win10激活工具下载一、win10专业版产品密钥NXRQM-CXV6P-PBGV...

ghostwinxp下载纯净版(ghost win7纯净版下载)

可以下载的,现在官网和其他网站上都可以下载xp原版的。可以通过以下步骤下载我的世界游戏到xp系统中:1.首先打开你的浏览器软件,搜索关键字“我的世界xp版下载”,找到可靠下载地址;2.从下载页面下...

惠普完整版驱动(惠普最新驱动)

惠普官方的标准操作:HP1050安装驱动步骤:一:准备:拿出驱动光盘放入光驱或到HP官网下载完整版驱动。二:不要插USB数据线或插上线打印机电源不要开,安装完整版驱动,当程序提示插入USB数据线时,插...

浏览器最好用的(浏览器最好用的插件)

一、谷歌浏览器谷歌浏览器是公认最好用的,这个可以从市场占有率看出端倪,超过三分之二的用户使用谷歌浏览器。Chrome浏览器以简洁快速著称,不管是普通用户还是开发人员,chrome浏览器都是首选。Chr...

fast路由器6位初始密码(fast路由器的密码)

答:fast路由器初始密码是admin;新款的迅捷无线路由器,管理界面没有初始密码。查看迅捷无线路由器底部标签,标签上标注了admin,说明初始密码就是admin;如果没有,说明该路由器没有初始密码。...

硬盘恢复软件哪个好(硬盘 恢复软件)

迷你兔数据恢复工具:支持恢复硬盘丢失的数据Pc3000数据恢复软件是一款非常专业的硬盘修复工具,能够对电脑硬盘资料数据进行修复,通过使用这个软件可以解决硬盘数据丢失故障,是一个用户进行硬盘资料修复好帮...

十大品牌监控摄像头排名(十大品牌监控摄像头排名第一)

答:1、华为/HUAWEI9.92、小米/MI9.63、罗技/Logitech9.64、海康威视/HIKVISION9.25、乔安/Jooan9.26、普联/TP-LINK9.27、乐橙8.98、萤石...

360手机助手老旧版本大全(360手机助手 老版本)

在设置里面找到历史记录就可能查看360手机助手·换机神器是安卓系统的换机软件,因为苹果的换机软件是爱思。1、打开360手机卫士,登陆账号,点击账号。2、进入个人中心,点击账户安全,在密保工具中,点击解...

系统应用工程师(系统工程的应用)

信息软件系统工程师有前途,毕业以后可以从事软件开发,软件系统的维护,运营等等,和计算机有关的工作内容,因为计算机专业可以说是一个非常热门的专业,很多的大型企业公司基本上都是以计算机研发为主的,薪资福利...

取消回复欢迎 发表评论: