python中各种下划线的理解
前单下划线:_var
作用:只在内部实现,不想被外部访问
如果我们想封装实例的私有属性,不被外部访问,只在本类中使用访问。则可以通过遵循一定的属性和方法命名约定来达到这种效果。
tips: 这种命名方式只是python的一种约定,并不会真正阻止别人访问内部的名称。
实例:
class A:
def __init__(self):
self._internal = 0 # An internal attribute
self.public = 1 # A public attribute
def public_method(self):
'''
A public method
'''
pass
def _internal_method(self):
pass
前双下划线:__var
作用:使用双下划线会导致其访问名称变成其他形式,这种属性在继承中是无法被覆盖的。
使用__var, 是希望该属性只在本类中使用,且不希望被继承的时候被覆盖了。
实例:
class A:
def __init__(self, n):
self.__private = n
self.a = 'a'
def _pprint(self):
print(self.__dict__)
# 访问的一定是A类实例的__private
print('a', self.__private)
# 如果要访问非本类的私有属性,需要显式调用
# 注意:A类中并没有_B__private属性,这里只是为了突出B类中要访问它自己的私有属性可以怎么访问。
print('b', self._B__private)
print(self.a)
print(self.b)
class B(A):
def __init__(self, n):
# super(B, self).__init__(n)
super().__init__(n)
self.__private = 999
def pprint(self):
self.b = 'b'
self._pprint()
# print(A.__mro__)
# print(B.__mro__)
b = B(22)
b.pprint()
后单划线:var_
作用:如果定义的变量和python关键字有冲突的话,则可以使用var_这种格式
如def_,class_, lambda_等
三种下划线区别
- 私有属性,不想被外部访问,则定义为前单下划线:_var
- 如果涉及到子类,而且不想父类的属性被子类覆盖,则使用前双下划线:__var
- 防止命名冲突,且不想与私有属性命名约定冲突,则使用单后下划线:var_
本文介绍了Python类中三种下划线的使用。前单下划线 _var 用于封装私有属性,仅内部使用,但只是约定;前双下划线 __var 使属性访问名改变,继承时无法被覆盖;后单下划线 var_ 用于避免与Python关键字冲突,并说明了三者的区别。
1617

被折叠的 条评论
为什么被折叠?



