'''
訪問私有屬性
判斷是否是該類型:isinstance(10,str)
'''
class Money(object):
def __init__(self):
self.__money = 0
def getMoney(self):
return self.__money
def setMoney(self, value):
#判斷value的值是不是整型
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型數字")
m1 = Money()
print(m1.getMoney())
m1.setMoney(100)
print(m1.getMoney())
m1.setMoney('i')
結果如下:
訪問私有屬性結果.jpg
私有的屬性,為了對外能訪問,提供了對外訪問的set和get方法。但是對于使用的時候略顯繁瑣,使用ret = property(get,set)
當對象獲取ret時,相當于調用get方法,當對象設置ret時,相當于調用set,將設置的值傳給set的方法作為實參。
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)
m1 = Money()
print(m1.money)
m1.money = 100
print(m1.money)
結果如下:
property結果1.jpg
property第二種表示方法:
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:不是整型數字")
m1 = Money()
print(m1.money)
m1.money = 100
print(m1.money)
結果如下:
property結果2.jpg
@property成為屬性函數,可以對屬性賦值時做必要的檢查,并保證代碼的清晰短小,主要有2個作用
1、將方法轉換為只讀
2、重新實現一個屬性的設置和讀取方法,可做邊界判定