• 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

  • 相关阅读:
    Windows Svr 2008 Ent R2 性能计数器显示不全
    SQL Server的keepalive
    C语言字符串常见操作-strcpy、strlen、strcat和strcmp实现
    计算机中数据的编码方式
    OC中的排序方法
    关于C语言内存对齐
    C语言内存管理总结-野指针
    Objective-C基础学习笔记(九)-Foundation
    Objective-C基础学习笔记(八)-内存管理-autorelease使用-property创建对象的内存管理-循环引用的内管管理
    Objective-C基础学习笔记(七)-分类-Category-类的本质-load和+initialize方法-SEL数据
  • 原文地址:https://www.cnblogs.com/wisir/p/11128904.html
Copyright © 2020-2023  润新知