Python面向对象编程之类的封装

 更新时间:2021年11月01日 11:56:35   作者:一碗周  
这篇文章主要介绍了Python面向对象编程之类的封装封装指属性和方法的抽象,属性的抽象又指对类的属性进行定义、隔离和保护,下面来看看文章的具体内容吧,需要的朋友可以参考一下,希望对你有所帮助

1、封装的理解

封装(Encapsulation):属性和方法的抽象

属性的抽象:对类的属性(变量)进行定义、隔离和保护

分为私有属性和公开属性

  • 私有属性:只能在类内部访问
  • 公开属性:可以通过类、对象名访问

可以选择公开或隐藏属性,隐藏属性的内在机理

方法的抽象:对类的方法(函数)进行定义、隔离和保护

分为私有方法和公开方法:

  • 私有方法:只能在类内部访问
  • 公开方法:可以通过类、对象名访问

可以选择公开或隐藏方法,隐藏方法的内部逻辑

  • 目标是形成一个对外可操作属性和方法的接口

封装就是让数据和代码称为类的过程,表达为:类——属性——方法

2、私有类属性、公开类属性、私有实例属性和公开实例属性

2.1 公开类属性

公开类属性就是类属性,语法结构

class ClassName:
    <类属性名> = <类属性初值>
    def __init__(self,[参数1], [参数2], ...[参数n]):
        self.<实例属性名> = <实例属性初值>
    ...

2.2 私有类属性

私有类属性只能当前类进行访问,子类不能访问。语法结构

class ClassName:
    <__私有类属性名> = <私有类属性初值>
    def __init__(self,[参数1], [参数2], ...[参数n]):
        self.<实例属性名> = <实例属性初值>
    ...

.<类属性>或者<对象名>.<类属性>的方式访问

有效保证了属性维护的可控性

示例代码如下:

class TestClass:
    __number = 0

    def __init__(self, num_value):
        for i in range(num_value + 1):
            TestClass.__number += i

    @classmethod  # 类方法
    def sum_number(cls):
        return TestClass.__number


value1 = TestClass(100)
print(TestClass.sum_number())  # 5050
# print(value1.__number)  # AttributeError: 'TestClass' object has no attribute '__number'

在类外卖访问.__number就会报出AttributeError异常

2.3 公开实例属性

公开实例属性就等于示例属性,语法结构

class <类名>:
    <类属性名> = <类方法值>
    def __init__(self, <参数列表>):
        self.<实例属性名> = <实例属性值>
    ...

2.4 私有实例属性

私有实例属性只能在当前类内部使用,子类也不能使用。语法结构

class <类名>:
    <类属性名> = <类方法值>
    def __init__(self, <参数列表>):
        self.<__私有实例属性名> = <实例属性值>
    ...

.<类属性>或者<对象名>.<类属性>的方式访问

有效保证了属性维护的可控性

示例代码:

class TestClass:

    def __init__(self, num_value):
        self.__number = 0
        for i in range(num_value + 1):
            self.__number += i

    def sum_number(self):
        return self.__number


value1 = TestClass(100)
print(value1.sum_number())  # 5050
# print(value1.__number)  # AttributeError: 'TestClass' object has no attribute '__number'

2.5 私有属性不一定真的私有

私有属性的双下划线只是一种转换约定,转换后,类内原有名字发生了变化,这是一种形式上的私有

示例代码:

class TestClass:

    def __init__(self, num_value):
        self.__number = 0
        for i in range(num_value + 1):
            self.__number += i

    def sum_number(self):
        return self.__number


value1 = TestClass(100)
print(value1.sum_number())  # 5050
print(value1._TestClass__number)  # 5050
# 可以通过 对象名._类名__属性 的方式来访问

可以通过对象名._类名__属性的方式来访问。

3、私有方法和公开方法

定义方法是在类内部定义并使用的方法。语法结构

class <类名>:
    def <__私有方法名>(self, <参数列表>):
        ...

私有方法定义的时候属性名字前面需要两个下划线( __ ).

各类方法都可以通过增加双下换线的方式将方法变为私有方法

私有方法在形式上保护了Python类内部使用的函数逻辑

私有属性与公开是程序员逻辑,不是安全逻辑,重视约定

4、类的保留属性

Python解释器预留的类属性,以双下换线开头或者结尾。

  • 保留属性也叫特殊属性
  • 以双下划线开头和结尾
  • 作用是为理解Python类提供了统一的属性接口
  • 属性值具有特殊的含义,类定义后直接使用

仅用<类名>访问的保留属性

保留属性 描述
__name__ 类的名词
__qualname__ 以.分隔从模板全局命名空间开始的类名称
__bases__ 类所继承的基类名称

5、类的保留方法

保留方法是Python解释器预留的方法,以双下划线开头和结尾

  • 保留方法也叫特殊方法
  • 以双下划线开头和结尾
  • 作用是为理解Python类提供了统一的方法接口
  • 方法逻辑:具有特定的含义,一般与操作符关联,类定义需要重载

到此这篇关于Python面向对象编程之类的封装的文章就介绍到这了,更多相关Python类的封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python-ElasticSearch搜索查询的讲解

    Python-ElasticSearch搜索查询的讲解

    今天小编就为大家分享一篇关于Python-ElasticSearch搜索查询的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • python的pygal模块绘制反正切函数图像方法

    python的pygal模块绘制反正切函数图像方法

    在本篇文章中我们给大家整理了关于如何用python的pygal模块绘制反正切函数图像的知识点内容,有需要的朋友们可以学习下。
    2019-07-07
  • Python对象循环引用垃圾回收算法详情

    Python对象循环引用垃圾回收算法详情

    这篇文章主要介绍了Python对象循环引用垃圾回收算法详情,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09
  • Python实现提取XML内容并保存到Excel中的方法

    Python实现提取XML内容并保存到Excel中的方法

    这篇文章主要介绍了Python实现提取XML内容并保存到Excel中的方法,涉及Python针对xml文件的读取、解析以及Excel文件的写入、保存等相关操作技巧,需要的朋友可以参考下
    2018-09-09
  • python hbase读取数据发送kafka的方法

    python hbase读取数据发送kafka的方法

    今天小编就为大家分享一篇python hbase读取数据发送kafka的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 搞笑的程序猿:看看你是哪种Python程序员

    搞笑的程序猿:看看你是哪种Python程序员

    这篇文章主要介绍了搞笑的程序猿:看看你是哪种Python程序员,不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码,显示出了不同的风格,代码都很简单,有趣,需要的朋友可以参考下
    2015-06-06
  • python 装饰器详解与应用范例

    python 装饰器详解与应用范例

    装饰器是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。 首先,让我们讨论下如何写你自己的装饰器
    2021-11-11
  • 初探TensorFLow从文件读取图片的四种方式

    初探TensorFLow从文件读取图片的四种方式

    本篇文章主要介绍了初探TensorFLow从文件读取图片的四种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 在Linux下使用命令行安装Python

    在Linux下使用命令行安装Python

    这篇文章主要介绍了在Linux下使用命令行安装Python,通过详细的图文介绍Linux安装Python的全部过程,希望对你有所帮助
    2021-06-06
  • Python出现segfault错误解决方法

    Python出现segfault错误解决方法

    这篇文章主要介绍了Python出现segfault错误解决方法,分析了系统日志提示segfault错误的原因与对应的解决方法,需要的朋友可以参考下
    2016-04-04

最新评论