學(xué)習(xí)過 Java 的同學(xué)都知道,Java 的類里面可以給方法和屬性定義公共的( public )或者是私有的 ( private ),這樣做主要是為了我們希望有些函數(shù)和屬性能給別人使用或者只能內(nèi)部使用。 通過學(xué)習(xí) Python 中的模塊,其實(shí)和 Java 中的類相似,那么我們?cè)趺磳?shí)現(xiàn)在一個(gè)模塊中,有的函數(shù)和變量給別人使用,有的函數(shù)和變量僅僅在模塊內(nèi)部使用呢?
在 Python 中,是通過 _ 前綴來實(shí)現(xiàn)的。正常的函數(shù)和變量名是公開的(public),可以被直接引用,比如:abc,ni12,PI等;類似__xxx__這樣的變量是特殊變量,可以被直接引用,但是有特殊用途,比如上面的 __name__ 就是特殊變量,還有 __author__ 也是特殊變量,用來標(biāo)明作者。注意,我們自己的變量一般不要用這種變量名;類似 _xxx 和 __xxx 這樣的函數(shù)或變量就是非公開的(private),不應(yīng)該被直接引用,比如 _abc ,__abc 等;
注意,這里是說不應(yīng)該,而不是不能。因?yàn)?Python 種并沒有一種方法可以完全限制訪問 private 函數(shù)或變量,但是,從編程習(xí)慣上不應(yīng)該引用 private 函數(shù)或變量。
比如:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
def _diamond_vip(lv):
print('尊敬的鉆石會(huì)員用戶,您好')
vip_name = 'DiamondVIP' + str(lv)
return vip_name
def _gold_vip(lv):
print('尊敬的黃金會(huì)員用戶,您好')
vip_name = 'GoldVIP' + str(lv)
return vip_name
def vip_lv_name(lv):
if lv == 1:
print(_gold_vip(lv))
elif lv == 2:
print(_diamond_vip(lv))
vip_lv_name(2)
輸出的結(jié)果:
尊敬的鉆石會(huì)員用戶,您好
DiamondVIP2
在這個(gè)模塊中,我們公開 vip_lv_name 方法函數(shù),而其他內(nèi)部的邏輯分別在 vip_lv_name 和 vip_lv_name private 函數(shù)中實(shí)現(xiàn),因?yàn)槭莾?nèi)部實(shí)現(xiàn)邏輯,調(diào)用者根本不需要關(guān)心這個(gè)函數(shù)方法,它只需關(guān)心調(diào)用 vip_lv_name 的方法函數(shù),所以用 private 是非常有用的代碼封裝和抽象的方法
一般情況下,外部不需要引用的函數(shù)全部定義成 private,只有外部需要引用的函數(shù)才定義為 public。
最后扯淡,歡迎加我微信:androidwed,進(jìn)入微信Python討論群,一起學(xué)習(xí)討論?,F(xiàn)在微信群只有50幾個(gè)人.