Python學習筆記(十八):property 的用法


1、爲私有屬性添加 getter、setter 方法:

有些時候,我們需要設置類中的屬性是私有的,讓外部不能直接操作屬性,而是通過屬性的 getter 和 setter 方法,間接操作私有屬性;

# 定義一個類
class Money(object):

    # 初始化方法
    def __init__(self):
        # 私有屬性
        self.__money = 100

    # 公有的 getter 方法
    def getMoney(self):
        return self.__money

    # 公有的 setter 方法
    def setMoney(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整數")

# 實例化對象
m = Money()

# 調用類的 getter 方法獲取私有屬性的值
print(m.getMoney())

# 調用類的 setter 方法設置私有屬性的值
m.setMoney(2000)
print(m.getMoney())

 

2、使用 property 升級 getter、setter 方法:

# 定義一個類
class Money(object):

    # 初始化方法
    def __init__(self):
        # 私有屬性
        self.__money = 100

    # 公有的 getter 方法
    def getMoney(self):
        return self.__money

    # 公有的 setter 方法
    def setMoney(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整數")

    # 定義一個公有屬性 money,接收 property 方法返回的值;
    # 將 getter 和 setter 方法名作爲參數傳入 property 方法;
    # 當外部代碼爲 print(m.money),python 解析器就會去調用
    # getMoney 方法,獲取私有屬性的值;
    # 當外部代碼爲 m.money = 2000,python 解析器就會去調用
    # setMoney(2000) 方法,設置私有屬性的值;
    money = property(getMoney, setMoney)

# 實例化對象
m = Money()

# 使用 property 封裝 getter、setter 方法,就不需要再去調用 getter、setter 方法了,
# 可以直接通過 property 方法的返回值,間接去調用 getter、setter 方法;
# 獲取值
print(m.money)	# 相當於調用 m.getMoney()

# 設置值
m.money = 2000	# 相當於調用 m.setMoney(2000)
print(m.money)

 

3、使用 property 代替 getter、setter 方法:

# 定義一個類
class Money(object):

    # 初始化方法
    def __init__(self):
        # 私有屬性
        self.__money = 100

    # 用 @property 裝飾器修飾的方法就相當於 getter 方法
    @property
    def money(self):
        print("==== getter ====")
        return self.__money

    # 用 @money.setter 裝飾器修飾的方法就相當於 setter 方法
    @money.setter
    def money(self, value):
        print("==== setter ====")
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整數")

# 實例化對象
m = Money()

# 獲取值
print(m.money)

# 設置值
m.money = 2000
print(m.money)

 

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