Effective Python 讀書筆記: 第27條: 多用public屬性,少用private屬性

# -*- 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() 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章