前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

封装

原创
作者头像
Heaven645
修改2024-08-06 20:59:56
1091
修改2024-08-06 20:59:56
举报
文章被收录于专栏:Python学习

前言

在面向对象编程(OOP)中,封装是一个重要的概念,旨在保护数据并限制对对象内部状态的直接访问。在 Python 中,私有成员是实现封装的关键工具。本章详细讲解了封装的基本概念以及私有成员的用法。


本篇文章参考:黑马程序员

一、基本概念

面向对象编程是一种许多编程语言支持的编程思想。简单来说,它是通过基于模板(类)创建实体(对象),并利用这些对象进行功能开发。

面向对象的三大特性

  • 封装
  • 继承
  • 多态

封装:将现实世界的事物用类来描述,具体表现为属性和方法。

通俗来讲,封装就是将事物的属性和行为整合到一个类中,通过成员变量和成员方法来实现对现实世界事物的描述。这样,程序能够更清晰地反映现实世界的复杂性。

现实世界中的事物有属性和行为,但并非所有的属性和行为都是对用户开放的。以手机为例,手机的基本属性如品牌、型号和长度,以及基本行为如上网、拍照和通话,都是对用户开放的。但是手机也有一系列对用户隐藏的属性和行为,比如运行电压、驱动信息等属性以及程序调度、内存管理等行为。

二、私有成员

因为现实事物有不公开的属性和行为,所以作为现实事物在程序中映射的类也有不公开的属性和行为。

为了实现这一点,类提供了私有成员的形式来支持:

  • 私有成员变量: 变量名以__开头(2个下划线)
  • 私有成员方法: 方法名以__开头(2个下划线)

私有成员的存在具有实际意义,它们专门用于类的内部,在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用),从而避免被外部访问。

这样的设计可保护类的内部数据和行为,不被外部随意修改,有助于维护数据的一致性和安全性,从而提高程序的可靠性。

私有成员方法不支持类外部直接访问:

代码语言:python
代码运行次数:0
复制
# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    # 私有成员变量
    __current_voltage=None   # 手机运行电压
    # 私有成员方法
    def __keep_single_core(self):
        print("让CPU单核运行")
# 私有成员方法不支持类外部直接访问
phone=Phone()
phone.__keep_single_core()

输出结果:

私有成员变量不支持类外部直接访问:

代码语言:python
代码运行次数:0
复制
# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    # 私有成员变量
    __current_voltage=None   # 手机运行电压
    # 私有成员方法
    def __keep_single_core(self):
        print("让CPU单核运行")

phone=Phone()
print(phone.__current_voltage)

输出结果:

私有成员(包括私有成员变量和私有成员方法)可以在类的内部被类的其他成员(如方法)访问,但无法通过类的实例在外部访问。

代码语言:python
代码运行次数:0
复制
# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    # 私有成员变量
    __current_voltage=1   # 手机运行电压
    # 私有成员方法
    def __keep_single_core(self):
        print("CPU以单核模式运行")

    # 5G通话方法
    def call_by_5g(self):
        if self.__current_voltage>=1:
            print("5G通话已开启")
        else:
            self.__keep_single_core()
            print("电量不足,无法使用5g通话,并已设置为单核运行")

phone=Phone()
phone.call_by_5g()

输出结果: 5G通话已开启

【例题】

设计一个手机类,内部包含:

①私有成员变量:__is_5g_enable,类型为bool,True表示开启5g,False表示关闭5g;

②私有成员方法:check_5g(),会判断私有成员is_5g_enable的值,若为True,打印输出“5g开启”;若为False,打印输出“5g关闭,使用4g网络”;

③公开成员方法:call_by_5g(),调用它会执行调用私有成员方法__check_5g(),判断5g网络状态,打印输出“正在通话中”。

【分析】

对用户公开的:call_by_5g()方法

对用户隐藏的:is_5g_enable私有变量和check_5g私有成员

代码语言:python
代码运行次数:0
复制
# 定义一个类,用来描述手机
class Phone:
    # 私有成员变量
    __is_5g_enable=False   # 5g状态
    # 私有成员方法
    def __check_5g(self):
        if self.__is_5g_enable:
            print("5g开启")
        else:
            print("5g关闭,使用4g网络")

    # 公开成员方法
    def call_by_5g(self):
        self.__check_5g()
        print("正在通话中")

phone=Phone()
phone.call_by_5g()

输出结果:

5g关闭,使用4g网络

正在通话中

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、基本概念
  • 二、私有成员
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档