• Python 编程基础 | 第五章-类与对象 | 5.4、访问控制


    一、访问控制

    为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前面添加单下划线_foo、双下划线__foo或者首尾加双下划线__ foo __,从而限制访问权限

    1、单下划线

    以单下划线开头的表示protected(保护)类型的成员,只允许类本身或子类访问,但不能使用“ from module impor”语句导入。例如:创建一个Swan类,定义保护属性_neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性_neck_swan

    class Swan:
        """天鹅类"""
        _neck_swan = "天鹅脖子长"  # 创建私有属性
    
        def __init__(self):
            print("__init__():", Swan._neck_swan)
    
    my_swan = Swan()  # 创建Swan类对象
    print("直接访问:", my_swan._neck_swan)  # 输出结果:直接访问: 天鹅脖子长
    print("直接访问:", Swan._neck_swan)     # 输出结果:直接访问: 天鹅脖子长
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    从上面的运行结果中可以看出:保护属性可以通过实例名或类名访问

    2、双下划线

    双下划线表示private(私有)类型的成员,只允许定义该方法的类本身进行访问,不能通过类的实例进行访问,但是可以通过下面的方式进行访问

    • 类的实例名._类名__xxx
    • 类名._类名__xxx

    例如:创建一个Swan类,定义保护类属性__neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出私有属性__neck_swan,代码如下:

    class Swan:
        """天鹅类"""
        __neck_swan = "天鹅脖子长"  # 创建私有属性
    
        def __init__(self):
            print("__init__():", Swan.__neck_swan)
    
    my_swan = Swan()  # 创建Swan类对象
    print("直接访问:", my_swan._Swan__neck_swan)  # 输出结果:直接访问: 天鹅脖子长
    print("直接访问:", Swan._Swan__neck_swan)     # 输出结果:直接访问: 天鹅脖子长
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    国际版阿里云/腾讯云:弹性高性能计算E-HPC入门概述
    光猫桥接模式详细步骤
    A37 STM32_HAL库函数 之PCD通用驱动 -- C-- 所有函数的介绍及使用
    curl、openssl、mbedtls的交叉编译过程
    ctf-pikachu-XSS
    Git企业开发级讲解(一)
    Python——zip的用法_list-dict复合字典+dict.get()函数用法
    幸福心理与抗逆力培养的工控系统安全实验课程研究
    java的调用百度接口工具方法(两个之间的距离)
    Elasticsearch6实践
  • 原文地址:https://blog.csdn.net/cloud323/article/details/133691880