搞砸私用名稱
- 在上一節的 Duck 類別範例中,呼叫(不完整)隱藏的屬性 hidden_name
- 對於不能被類別定義式之外的程式看到的屬性,Python 有一個命名規範:在開頭使用雙底線(__)
- 注意,它並未在 getter 內印出
- 雖然,這不是完美的保護方式,但弄亂名稱可以防止有人不小心或故意直接存取屬性
>> class Duck():
def __init__(self, input_name):
self.__name = input_name
@property
def name(self):
print('inside the getter')
return self.__name
@name.setter
def name(self, input_name):
print('inside the setter')
self.__name = input_name
>>> fowl = Duck('Howard')
>>> fowl.name
inside the getter
'Howard'
>>> fowl.name = 'Donald'
inside the setter
>>> fowl.name
inside the getter
'Donald'
>>> fowl.__name
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
fowl.__name
AttributeError: 'Duck' object has no attribute '__name'
>>> fowl._Duck__name
'Donald'