例項講解Python中的私有屬性

2022-10-05 00:03:34 字數 2266 閱讀 7654

在python中可以通過程式設計客棧在屬性變數名前加上雙下劃線定義屬性為私有屬性,如例子:

複製** **如下:

#! encodingcprdyp=utf-8

class a:

def __init__(self):

# 定義私有屬性

self.__name = "wangwu"

# 普通屬性定義

self.age = 19

a = a()

# 正常輸出

print a.age

# 提示找不到屬性

print a.__name

執行輸出:

複製** **如下:

traceback (most recent call last):

file "c:\users\lee\documents\aptana studio 3 workspace\testa\a.py", line 19, in

print a.__name

attributeerror: a instance has no attribute '__name'

訪問私有屬性__name時居然提示找不到屬性成員而不是提示許可權之類的,於是當你這麼寫卻不報錯:

複製** **如下:

#! encoding=utf-8

class a:

def __init__(self):

# 定義私有屬性

self.__name = "wangwu"

# 普通屬性定義

self.age = 19

a = a()

a.__name = "lisi"

print a.__name

執行結果:

1lisi

在python中就算繼承也不能相互訪問私有變數,如:

複製** **如下:

#! encoding=utf-8

class a:

def __init__(self):

# 定義私有屬性

self.__n = "wangwu"

# 普通屬性定義

self.age = 19

class b(a):

def sayname(self):

priwww.cppcns.comnt self.__name

b = b()

b.sayname()

執行結果:

複製** **如下:

traceback (most recent call last):

file "c:\users\lee\documents\aptana studio 3 workspace\testa\a.py", line 19, in

b.sayname()

file "c:\users\lee\documents\aptana studio 3 workspace\testa\a.py", line 15, in sayname

print self.__name

attributeerror: b instance has no attribute '_b__name'

或者父類訪問子類的私有屬性也不可以,如:

複製** **如下:

#! encoding=utf-8

class a:

def say(self):

print self.name

print self.__age

class b(a):

def __init__(self):

self.name = "wangwu"

self.__age = 20

b = b()

b.say()

執行結果:

複製** **如下:

wangwu

traceback (most recent call last):

file "c:\users\lee\documents\aptana studio 3 workspace\testa\a.py", line 15, in

b.say()

file "c:\users\lee\documents\aptana studio 3 workspace\testa\a.py", line 6, in say

print self.__age

attributeerror: b instance has no attribute '_a__age'

本文標題: 例項講解python中的私有屬性

本文位址: /jiaoben/python/112597.html

python學習筆記013 模組中的私有屬性

在python中,沒有類似private之類的關鍵字來宣告私有方法或屬性。若要宣告其私有屬性,語法規則為 屬性前加雙下劃線,屬性後不加 雙 下劃線,如將屬性name私有化,則 name 即可。實際上,屬性前加單下劃線,屬性後不加下劃線也可以 name 1 以乙個下劃線開頭的識別符號 不能訪問的方法或...

Python中logging例項講解

logging 的基本用法網上很多,這裡就不介紹了。在引入正文之前,先來看乙個需求 假設需要將某功能封裝成類庫供他人使用,如何處理類庫中的日誌?數年前在乙個 c 開發的專案中,我用程式設計客棧了這樣的方法 定義乙個 logging 基類,所有需要用到日誌的類都繼承這個基類,這個基類中定義乙個 log...

python中的多重繼承例項講解

python和c 一樣,支援多繼承。概念雖然容易,但是困難的工作是如果子類呼叫乙個自身沒有定義的屬性,它是按照何種順序去到父類尋找呢,尤其是眾多父類中有多個都包含該同名屬性。對經典類和新式類來說,屬性的查詢順序是不同的。現在我們分別看一下經典類和新式類兩種不同的表現 經典類 複製 如下 usr bi...