python _、__、__xx__之間的差別


默認情況下,Python中的成員函數和成員變量都是公開的(public),在python中沒有類public,private等關鍵詞來修飾成員函數和成員變量。其實,Python並沒有真正的私有化支持,但可用下划線得到偽私有。   盡量避免定義以下划線開頭的變量!

  (1)_xxx      "單下划線 " 開始的成員變量叫做保護變量,意思是只有類實例和子類實例能訪問到這些變量,需通過類提供的接口進行訪問;不能用'from module import *'導入

  (2)__xxx    類中的私有變量/方法名 (Python的函數也是對象,所以成員方法稱為成員變量也行得通。)," 雙下划線 " 開始的是私有成員,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個數據。

  (3)__xxx__ 系統定義名字,前后均有一個“雙下划線” 代表python里特殊方法專用的標識,如 __init__()代表類的構造函數。

 

#-*- coding:utf-8 -*-

class A(object):

    def __init__(self):#系統定義方法
        self.string='A string'
        self._string='A _string'
        self.__string='A __string'#私有變量

    def fun(self):
        return self.string + ' fun-A'

    def _fun(self):
        return self._string+'  _fun-A'

    def __fun(self):#私有方法
        return self.__string+' __fun-A'

    def for__fun(self):#內部調用私有方法
        return self.__fun()

class B(A):

    def __init__(self):#系統定義方法
        self.string = 'B string'


a=A()
print a.string
print a._string
# print a.__string 不可訪問

print a.fun()
print a._fun()
#print a.__fun() 不可訪問
print a.for__fun()

b=B()
print b.fun()
print b.fun().__len__()#系統定義函數

 

輸出:

A string
A _string


A string fun-A
A _string _fun-A
A __string __fun-A


B string fun-A
14

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM