zoukankan      html  css  js  c++  java
  • 测试Python类成员的单下划线,双下划线,两头下划线的区别

    首先原谅一个菜鸟叫他“两头下划线”。记得在windows编程中,很多宏定义使用下划线+大写,给人逼格很高的错觉。对于Python下划线的认识,大概是从__dict__这个属性开始的,看__dict__的名字,首先她是一个字典,key是类或对象的所有成员,value是成员对应的值。我们举个简单的例子说明单下划线,双下划线,两头下划线的区别。

    >>> class student(object):
        __name = 0
        _sex = 'male'
    
        
    >>> student.__dict__
    mappingproxy({'__module__': '__main__', '_student__name': 0, '_sex': 'male', '__dict__': <attribute '__dict__' of 'student' objects>, '__weakref__': <attribute '__weakref__' of 'student' objects>, '__doc__': None})
    >>> student.__name
    Traceback (most recent call last):
      File "<pyshell#58>", line 1, in <module>
        student.__name
    AttributeError: type object 'student' has no attribute '__name'
    >>> student._student__name
    0
    >>> student._sex
    'male'

    总结:我们声明了一个学生类,分别用但下划线和双下划线定义了一个成员,然后我们试图访问成员,我们发现:双下划线的成员无法直接访问,通过__dict__我们看到,在类的内部,Python自动将__name 解释成 _student__name,于是我们用 _student__name访问,这次成功。然而,_name不受影响。所以:

    两头下划线:Python类内置成员专用,区别用户自定义成员

    单下划线:类的普通成员

    爽下划线:解析器自动转换为:_类名__成员名,代替原有成员,访问需要在原有成员名字前加上_类名。

  • 相关阅读:
    Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据(转)
    保存图片文件到本地
    android ScrollView中嵌套GridView,ListView只显示一行的解决办法
    蒙版提示页(添加新功能后的一种提示)
    C和指针 第三章--数据
    *(ptr++) += 123
    优先级队列-堆
    单链表相关(一)
    字符间的距离-动态规划
    和最大的连续子数组
  • 原文地址:https://www.cnblogs.com/fanyuchen/p/6961409.html
Copyright © 2011-2022 走看看