• python以下划线开头的变量和函数的作用


    在python中,我们经常能看到很多变量名以_下划线开头,而且下划线的数量还不一样,那么这些变量的作用到底是什么?

    变量名分类:

    # 以数字、字母开头: 正常的公有变量名
    a = 1
    def aa():
    pass
    # 以单下划线开头: 半私有的变量名
    _b = 2
    def _bb():
    pass
    # 以双下划线开头: 私有变量名
    __c = 3
    def __cc():
    pass
    # 以双下划线开头,双下划线结尾: 内置属性名或者魔法方法名

    __name__, __dir__

    公有变量名:

    以此类名称命名的对象,为公有对象,任何人都可以使用

    半私有变量名:

    以此类名称命名的对象,需要分为两种情况

    1.类外

    类外的半私有对象、私有对象,功能一致,均是在本模块中可以正常使用,但是不能被直接导入并调用

    如果一定要在模块外使用,那么需要导入本模块,然后使用(模块名.变量名)进行调用

    2.类中

    类中的半私有对象,仅仅是概念上的私有,默认不要再类外进行调用

    实际在类外,均可以使用(实例名.变量名/类名.变量名)进行调用

    私有变量名:

     以此类名称命名的对象,也需要分为两种情况

    1.类外

    此种情况下的对象,和半私有对象一样,可参照上面

    2.类中

    类中的私有对象,在类外均不能直接调用,可以理解为真私有

    但是,python中没有完全私有的对象,此种对象也是可以在类外进行调用的,这里涉及到一个概念:矫直

    class A:

    def get_1(self):
    return 1

    def _get_2(self):
    return 2

    def __get_3(self):
    return 3

    print(dir(A))

    结果为:
    ['_A__get_3', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
    '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
    '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__',
    '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
    '__weakref__', '_get_2', 'get_1']

    从打印结果中我们看到,类A并不存在__get_3这么一个属性,但是存在一个_A__get_3的属性,这就是矫直

    python对于出现在类中的私有属性或者私有方法,进行矫直,矫直方法就是在私有属性名、私有方法名前添加(_类名)

    那么,我们想要调用类的私有属性和方法的时候,就可以直接用矫直后的属性名进行调用

    魔法方法:

     这是python自己实现的属性和方法,一般不允许自定义类似此种命名方式的属性或者方法

    关于这些方法和属性的作用,大家可以自己试一试

    原文:https://blog.csdn.net/baidu_28289725/article/details/81870462

  • 相关阅读:
    python 数据结构与算法 day04 冒泡排序
    阿里代码扫描插件安装 (IDEA)
    Kafka
    女生赛训练 2
    2019 DISCS PrO High School Division
    计算机安全之密码安全 从 Hash 到 MD5
    CodeForces Round #559 Div.2
    CodeForces Round #558 Div.2
    CodeForces Round #560 Div.3
    NCD 2019 (AK)
  • 原文地址:https://www.cnblogs.com/wisir/p/11128904.html
Copyright © 2020-2023  润新知