私有化規則與屬性Property

上一篇文章: Python裝飾器:python真正入門的鑑定標準
下一篇文章: Python垃圾回收詳解

一、私有化

變量定義規則python

變量形式 解讀
xx 公有變量xx
_xx 單前置下劃線,私有化屬性或方法,from somemodule import *禁止導入,類對象和子類進能夠訪問。
__xx 雙前置下劃線,避免與子類中的屬性命名衝突,沒法再在外部直接訪問。
__xx__ 雙先後下劃線,python自定義使用的的屬性或者方法名稱,例如__init__,不要自定義這種名稱的變量
x_ 單後置下劃線,避免與Python關鍵詞衝突

二、屬性Property

  • 私有屬性添加getter和setter方法

實例:segmentfault

class Man():
    def __init__(self):
        self.__age=18
    def getAge(self):
        return self.__age
    def setAge(self,value):
        #isinstance用來判斷一個對象是否是指定類型
        #下面語句就是用來判斷value是否是int類型
        if isinstance(value,int):
            self.__age=value
        else:
            print("輸入的年齡不是整數")

if __name__=="__main__":
    mark=Man()

    mark.setAge("xxx")
    print(mark.getAge())
    mark.setAge(20)
    print(mark.getAge())

    #下面一句會報錯
    #print(mark.age)

結果:code

輸入的年齡不是整數
18
20
  • 使用property升級getter和setter方法

實例:對象

class Man():
    def __init__(self):
        self.__age = 18

    def getAge(self):
        return self.__age

    def setAge(self, value):
        # isinstance用來判斷一個對象是否是指定類型
        # 下面語句就是用來判斷value是否是int類型
        if isinstance(value, int):
            self.__age = value
        else:
            print("輸入的年齡不是整數")
    age=property(getAge,setAge)


if __name__ == "__main__":
    mark = Man()

    mark.age="xxx"
    print(mark.age)
    mark.age=20
    print(mark.age)

結果:get

輸入的年齡不是整數
18
20
  • 使用property取代getter和setter方法

實例:it

class Man():
    def __init__(self):
        self.__age = 18

    @property
    def age(self):
        return self.__age
    @age.setter
    def age(self,value):
        # isinstance用來判斷一個對象是否是指定類型
        # 下面語句就是用來判斷value是否是int類型
        if isinstance(value, int):
            self.__age = value
        else:
            print("輸入的年齡不是整數")


if __name__ == "__main__":
    mark = Man()

    mark.age="xxx"
    print(mark.age)
    mark.age=20
    print(mark.age)

結果:入門

輸入的年齡不是整數
18
20
相關文章
相關標籤/搜索