7. 設定私用變數
私用變數(private variable)的寫法是在變數前方加上2個底線(underscore)。在類別中定義私用變數只在類別內使用,在其外即使寫相同的名稱也無法取用它。
(1) 用__設定私用的實體變數
以下是一個例子:
第3及4行各宣告一個私用的實體變數。 第7, 10, 13, 16行是在類別之內,可以取用私用變數。
以下是一個使用它們的例子:
執行結果:
110001 王小明 Traceback (most recent call last): File "d:\1102-Python\2-7.py", line 23, in print(s.__no) AttributeError: 'Student' object has no attribute '__no'
說明:
(2) 用__設定私用的實體變數會被存成新名稱
以上的私用實體變數被存成新名稱,使用dir()函式可以查看內容:
執行結果:
(3) 用_設定私用的實體變數
用1個底線設定私用變數並不會改變儲存時的變數名稱,在類別之外也能取存此種私用變數。在模組中使用1個底線設定的方式也稱為weak private indicator。如果用 from ... import * 的指令匯入其他模組時,用1個底線設定的私用類別、函式、變數將不會被匯入。
以下是一個使用的例子:
執行結果:
110001 110001 ['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', '_name', '_no', 'getName', 'getNo', 'setName', 'setNo']
說明:
問題:
撰寫一個「成績」(Score)的類別,每個實體有3個私用實體變數,包括國文、英文、數學。請生成以下實體,再印出其國文、英文、數學成測: 國文70,英文50,數學90 國文80,英文65,數學75 國文75,英文80,數學85