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

编辑: admin 分类: python 发布时间: 2021-12-03 来源:互联网
目录
  • 1、封装的理解
  • 2、私有类属性、公开类属性、私有实例属性和公开实例属性
    • 2.1 公开类属性
    • 2.2 私有类属性
    • 2.3 公开实例属性
    • 2.4 私有实例属性
    • 2.5 私有属性不一定真的私有
  • 3、私有方法和公开方法
    • 4、类的保留属性
      • 5、类的保留方法

        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类的封装内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!

        【来源:自由互联、韩国大带宽服务器http://www.558idc.com/lg.html】