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)