首页 > 技术文章 > 🍖类的封装

songhaixing 2020-12-26 16:42 原文

引入

先来举个例子 :

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

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()

推荐阅读