python中的下劃線

概述

python中的下劃線主要分爲以下幾類:java

  • 前置單下劃線,如\_a,\_variable,主要是用於將變量或方法定義爲私有屬性。這裏的私有屬性並不是如java中的私有,而是一種約定俗成,想強行訪問仍舊能夠正常訪問。
  • 後置單下劃線,如a\_,val\_,主要用於將變量區別,如變量名稱和關鍵字衝突,後面加個下劃線區別開來。
  • 前置雙下劃線,如\_\_val,類中帶前置雙下劃線的變量或方法,都會觸發python解釋器的名稱修飾,是不能直接經過該名稱去訪問到的,實現了必定程度上的隔離。
  • 先後都有雙下劃線,如\_\_init\_\_,這類方法是python中的魔法方法,能夠去重載。
  • 單下劃線自己如 \_,主要用於無心義的變量名。

前置單下劃線

將變量名,方法名指定爲私有屬性,但在外部仍舊能夠訪問到。這裏只是一種約定俗成,對於私有方法或變量名,表明該對象/模塊的這類方法或者變量不想暴露出來,應儘可能避免訪問私有屬性或方法。python

舉例:code

class A(object):
    def __init__(self):
        self._private=0
    def _private_method(self):
        print('AAAAA')       
>>>a=A()
>>>a._private
0
>>>a._private_method()#均能直接訪問
AAAAA

後置下劃線

主要用於區分變量名對象

def_=3
int_=5

前置雙下劃線

用雙下劃線修飾屬性或者方法,會出發名稱修飾,即在外部訪問時,該方法名或變量名會變爲 \_類名\_\_變量名;直接訪問__變量名是不存在的。接口

舉例:get

class A(object):
    def __init__(self):
        self.__private=0
    def __private_method(self):
        print('AAAAA')
>>>a=A()
>>>a.__private
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'A' object has no attribute '__private'
>>>a.__private_method()#
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'A' object has no attribute '__private_method'
    
>>>a._A__private
0
>>>a._A__private_method()
AAAAA

能夠看到,這種狀況下最好定義一個接口去直接訪問。由於內部名稱仍是沒變的,名稱修飾主要是在實例化後調用屬性或者方法時做用了。input

class A(object):
    def __init__(self):
        self.__private=0
    def __private_method(self):
        print('AAAAA')
    def get_p(self):
        return self.__private
>>>a=A()
>>>a.get_p()
0

包括上面的單下劃線規約的私有屬性,也能夠經過定義接口方法去訪問,這樣的好處是私有的方法或者屬性沒法被篡改,能夠很好的保護起來。這裏能夠和@property結合起來使用。it

單下劃線自己_

舉例:ast

>>>a=[_ for _ in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>>a,_,_,d=func(*args,**kwargs)
#這種狀況是咱們只想要返回的第一個和第四個參數,中間兩個對於當前模塊沒啥意義,就無需去定義一個變量名稱。
相關文章
相關標籤/搜索