zoukankan      html  css  js  c++  java
  • Python中单下划线和双下划线

    双下划线开头和结尾

    Python中存在一些特殊的方法,有些方法以双下划线 “__” 开头和结尾,它们是Python的魔法函数,比如__init__()和__str__等等。不用要这种方式命名自己的变量或者函数

    class A:
         def __init__(self, text):
             self.text = text
    
         def __str__(self):
            return self.text
    
    a = A("test")
    
    print(a)  # 输出test        

    双下划线开头

    在前面加上“__”,表示它是私有成员,我们不能直接访问。比如 “__xxx” 如果要访问得通过 _class__xxx 的方式进行访问。虽然不能防止修改私有属性,但可以有效降低有意或者无意的修改

    class A:
        def __init__(self):
            self.__name = "text"
    
    a = A()
    print(a.__name)  # 报错
    print(a._A__name)  # 输出text

    从图中可以看到双下划线开头的变量,Python自动在前面加上了 “_class” 的前缀,所以我们访问时也要加上相应的前缀才能正常访问

    单下划线开头

    _xxx:一种约定,用来指定变量私有。程序员用来指定私有变量的一种方式。不能用from module import * 导入,其他方面和公有一样访问。

    文件内容

    # A.py
    class A:
        def __init__(self):
            self.text = "A"
    
    class _B:
        def __init__(self):
            self.text = "B
    # test.py
    from A import *
    a = A()
    print(a.__dict__)
    
    b = _B()
    print(b.__dict__)

    执行结果

    可以看到我们导入了A.py中所有的类,但其实_B并没有被导入,但是我们可以通过别的方式访问这个类,修改我们的test.py文件为以下内容。

    import A
    a = A.A()
    print(a.__dict__)
    
    b = A._B()
    print(b.__dict__)

    除了不能通过 from module import * 这种方式导入外,跟公有类并没有差别

  • 相关阅读:
    HDU 1501 Zipper(DFS)
    HDU 2181 哈密顿绕行世界问题(DFS)
    HDU 1254 推箱子(BFS)
    HDU 1045 Fire Net (DFS)
    HDU 2212 DFS
    HDU 1241Oil Deposits (DFS)
    HDU 1312 Red and Black (DFS)
    HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
    HDU 1022 Train Problem I(栈)
    HDU 1008 u Calculate e
  • 原文地址:https://www.cnblogs.com/dogecheng/p/11461257.html
Copyright © 2011-2022 走看看