python中下划线详解

本文介绍了Python类中三种下划线的使用。前单下划线 _var 用于封装私有属性,仅内部使用,但只是约定;前双下划线 __var 使属性访问名改变,继承时无法被覆盖;后单下划线 var_ 用于避免与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_等

三种下划线区别

  1. 私有属性,不想被外部访问,则定义为前单下划线:_var
  2. 如果涉及到子类,而且不想父类的属性被子类覆盖,则使用前双下划线:__var
  3. 防止命名冲突,且不想与私有属性命名约定冲突,则使用单后下划线:var_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值