# -*- encoding: utf-8 -*-
import os
'''
第27條: 多用public屬性,少用private屬性
關鍵:
1 python類成員變量的可見度
可見度種類: public, proteced(單下劃線的屬性)和private(雙下劃線的屬性)
2 private屬性
含義: 兩個下劃線開頭的屬性, 例如: self.__private_field = 10。
特點:
1) 類的外面直接訪問private字段會引發異常
2) 子類無法訪問父類的private字段
原理: python對私有屬性名稱做了簡單變換
帶來的問題: 如果繼承的父類變換成另一個父類,並且私有屬性也發生變化,會導致子類對父類中私有變量的使用帶來問題
解決方法: 讓子類更多地訪問超類地protected屬性,不把屬性設置爲private
使用private的場景: 在超類中使用private屬性,確保子類的屬性名不會與它重複
3 protected屬性
含義:單個下劃線開頭的字段
4 總結
儘量不要設置private屬性,讓子類允許訪問父類的內部api
private屬性用來解決父類和子類屬性名稱衝突的問題
參考:
Effectiv Python 編寫高質量Python代碼的59個有效方法
'''
class BaseClass(object):
def __init__(self):
self.__value = 5
def getValue(self):
return self.__value
class ChildClass(BaseClass):
def __init__(self):
super(ChildClass, self).__init__()
self._value = 10
def process():
childObj = ChildClass()
print childObj._value
print childObj.getValue()
if __name__ == "__main__":
process()