文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

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解释器预留的类属性,以双下换线开头或者结尾。

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

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

5、类的保留方法

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯