编程语言
首页 > 编程语言> > python基础知识_下划线

python基础知识_下划线

作者:互联网

1. 单前导下划线

2. 单末尾下划线

3. 双前导下划线

class Test:
   def __init__(self):
       self.foo = 11
       self._bar = 23
       self.__baz = 23
       

>>> t = Test()
>>> dir(t)
['_Test__baz', '__class__', '__delattr__', '__dict__', '__dir__',
'__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'__weakref__', '_bar', 'foo']

解释:__baz被解释器改写为'_Test__baz'。这样做是为了防止变量在子类中被重写


# 创建另一个扩展Test类的类,并尝试重写构造函数中添加的现有属性
class ExtendedTest(Test):
   def __init__(self):
       super().__init__()
       self.foo = 'overridden'
       self._bar = 'overridden'
       self.__baz = 'overridden'


>>> t2 = ExtendedTest()
>>> t2.foo
'overridden'
>>> t2._bar
'overridden'
>>> t2.__baz
AttributeError: "'ExtendedTest' object has no attribute '__baz'"

>>> dir(t2)
['_ExtendedTest__baz', '_Test__baz', '__class__', '__delattr__',
'__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__gt__', '__hash__', '__init__', '__le__',
'__lt__', '__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', '_bar', 'foo', 'get_vars']

>>> t2._ExtendedTest__baz
'overridden'

解释:__baz变成_ExtendedTest__baz以防止意外修改;



4. 双前导和双末尾下划线

5. 单下划线

6. 总结

模式举例含义
单前导下划线_var命名约定,仅供内部使用。通常不会又python解释器强制执行(通配符导入除外),只作为程序员的提示。
单末尾下划线var_按照约定使用以避免与python关键字的命名冲突,如class_
双前导下划线__var当在类上下文中使用时,触发“名称修饰”。由python解释器强制执行。如类Test中定义了__bar这个变量,最终会被解释为_Test__bar
双前导和双末尾下划线__var__表示python语言定义的特殊方法。避免在自己的属性中使用这种命名方式
单独下划线_有时用作临时或无意义变量的名称(“不关心”)。也表示pyhont REPL中最近一个表达式的结果。

7. 参考链接

https://blog.csdn.net/tcx1992/article/details/80105645

标签:__,bar,下划线,python,self,baz,基础知识,Test
来源: https://blog.csdn.net/NB6758/article/details/120209876