类的封装

引入

先来举个例子 :

当你摁下电脑开机键, 你不需要考虑主板是怎么通电的、 磁盘是怎么转动的、系统的信息是怎么加载的、里面的一系列化学或者物理变化是怎么样的,你面对的就是一个开关键, 摁下它, 电脑就开起来了.

v2-cfc14c7293afd962ecbd1dc31dafd002

又比如:

一个玩具制造厂, 制作一个机器人, 我们需要去考虑机器人的每一个细节: 手臂、腿、头、躯干等等,制作简单的玩具不要紧, 如果设计的玩具非常的复杂, 并且这工厂还有很多其他类型的玩具生产(小熊, 佩奇, 芭比公主,飞机模型等等)

497915717af56b63a5454a26b127916

上面我们使用面向过程的思想去设计, 在程序中就会让我们的代码很长, 很杂乱

于是工厂听取了小王的建议, 引进了一台制造机器人玩具的机器, 我们只需要摁下机器的开关, 它就会自动制造机器人

这个时候我们不再去关注是先制造手还是脚还是躯干这些细节, 我们面对的就只是一台机器, 这机器就是一个对象

原理 : 以前我们需要关注制作玩具的每个步骤, 现在我们将步骤都封装到一个机器里面, 留给我们的只剩一个开关, 我们只需要摁开关就可以生产玩具了, 这就是面向对象的三大特性之一 : 封装, 下面我们将详细展开介绍

一.封装

1.什么封装

  • 封装是Python中面向对象的三大特性之一
  • 封装就是隐藏对象的属性和实现细节, 仅对外提供公共访问方式

2.为什么使用封装

  • 提高安全性 : 避免用户对类中属性或方法进行不合理的操作
  • 隔离复杂度 : 就以上面的例子为例, 你只需要机器提供给你的开关, 内部结构不需要知道
  • 保证内部数据结构完整性 : 很好的避免了外部对内部数据的影响,提高了程序的可维护性
  • 提供代码的复用性

3.封装的原则

  • 将不需要对外提供的功能都给隐藏起来
  • 把属性都隐藏, 提供公共方法对其方法

二.隐藏

在python中用双下划线开头的方式将属性隐藏起来(设置成私有的)

  • 其实这仅仅这是一种变形操作且仅仅只在类定义阶段发生变形
  • 类中所有双下划线开头的名称如__xxx都会在类定义时自动变形成:_[类名]__xxx的形式
class Eat:
    __breed = "五花肉"        # 变形 : "_Eat__breed"

    def __init__(self):     
        self.__meat = "大块"  # 变形 : "_Eat__meat"

    def __eat(self):          # 变形 : "_Eat__eat"
        print(f"吃了{self.__meat}的{self.__breed}")

    def eat_meat(self):
        self.__eat()          # 只有在类的内部才可以通过"__eat"的形式访问到

P1 = Eat()

🍔调用类提供的接口(方法)
P1.eat_meat()      # 吃了大块的五花肉

🍔调用隐藏的属性/方法,报错
print(P1.breed)    # 报错 "AttributeError" 没有该属性
print(P1.__breed)  # 报错 "AttributeError" 没有该属性
P1.__eat()         
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给你骨质唱疏松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值