您现在的位置是:群英 > 开发技术 > Python语言
python的封装是什么意思,怎样实现封装?
Admin发表于 2021-12-06 18:02:242358 次浏览

    这篇文章给大家分享的是python封装的相关内容,对新手来说,可能对Python面向对象编程中的封装不是很理解,对此本文就给大家讲讲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的封装的知识,大家可以关注群英网络其它相关文章。

    文本转载自脚本之家

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

    标签: python的封装
    相关信息推荐
    2022-04-28 14:07:51 
    摘要:给大家带来一篇关于python如何输入的相关教程文章,内容涉及到Python、python教程等相关内容,更多关于python的内容希望能够帮助到大家。
    2022-04-27 17:46:43 
    摘要:这篇文章主要介绍了C++ 函数指针内容,下面文章围绕C++ 函数指针的相关资料展开详细内容,包括函数指针的进阶内容,需要的朋友可以参考一下,希望对大家有所帮助
    2022-05-27 18:02:21 
    摘要:java中this关键字的用法:1、当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量;2、在构造函数中,通过this可以调用同一类中别的构造函数;3、使用this同时传递多个参数。
    云活动
    推荐内容
    热门关键词
    热门信息
    群英网络助力开启安全的云计算之旅
    立即注册,领取新人大礼包
    • 联系我们
    • 24小时售后:4006784567
    • 24小时TEL :0668-2555666
    • 售前咨询TEL:400-678-4567

    • 官方微信

      官方微信
    Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
    增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
    免费拨打  400-678-4567
    免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
    微信公众号
    返回顶部
    返回顶部 返回顶部