1. 程式人生 > >使用property升級和取代getter和setter方法

使用property升級和取代getter和setter方法

使用property升級getter和setter方法

class Money(object):
    def __init__(self):
        self.__money = 0

    def getMoney(self):
        return self.__money

    def setMoney(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型數字")
    money = property(getMoney, setMoney)

isinstance(value, int):判斷value是不是int型別

執行結果

In [1]: from get_set import Money

In [2]: 

In [2]: a = Money()

In [3]: 

In [3]: a.money
Out[3]: 0

In [4]: a.money = 100

In [5]: a.money
Out[5]: 100

In [6]: a.getMoney()
Out[6]: 100

使用property取代getter和setter方法

@property成為屬性函式,可以對屬性賦值時做必要的檢查,並保證程式碼的清晰短小,主要有2個作用

  • 將方法轉換為只讀

  • 重新實現一個屬性的設定和讀取方法,可做邊界判定

    class Money(object):
          def __init__(self):
              self.__money = 0
      
          @property
          def money(self):
              return self.__money
      
          @money.setter
          def money(self, value):
              if isinstance(value, int):
                  self.__money = value
              else:
                  print("error:不是整型數字")
    

執行結果

In [3]: a = Money()

In [4]: 

In [4]: 

In [4]: a.money
Out[4]: 0

In [5]: a.money = 100

In [6]: a.money
Out[6]: 100