眾所周知,像Java,C++這些語言中都有private這種修飾符,一般聲明類的時候,我們都用private聲明一個屬性,然后給它寫一個get方法和一個set方法,可能有人有疑問,為啥不直接寫成public呢?
這個問題我也想過,其實最主要的作用說白了就是一個限制作用,比如:
setAge(int age){ if(age<1||age>120) throw new Exception(" 你輸入的年齡不合法"); }else{ this.age=age; }
其次的一些作用包括寫上get和set的時候,IDE可以將該類的所有屬性提示出來,不過這是小作用。
那么,在Python中我們怎么寫get和set方法呢?
在說之前,我還是想吐槽,Python設計感覺特別不正規,因為Python中沒有private,屬性前面加個__(兩個下划線)就是私有屬性了,你要是真是也就罷了,實際上呢?就是給人家改個名字。比如:
class AAA(object): def __init__(self, name): self.__name = name def main(): a = AAA('陳馳') # print(a.__name) # 這里肯定打印找不到 print(a.__dict__) print(a._AAA__name) if __name__ == '__main__': main()
運行結果:

是不是很low?就給你改了個名字,就變成私有的了。我要是想改, 我只需要
a._AAA__name = '石澤濤' print(a._AAA__name) print(a.__dict__)
結果就變成了:

唉,算了算了,今天不吐槽了。這里總結一下Python的get和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:不是整型數字")
就是仿照的Java的寫法。
高級寫法1
采用property的類屬性方式:
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設置值時調用setMoney,當獲取值時調用getMoney money = property(getMoney, setMoney) a = Money() a.money = 100 # 調用setMoney方法 print(a.money) # 調用getMoney方法 #100
高級寫法2
采用property的裝飾器方式:
class Money(object): def __init__(self): self.__money = 0 # 使用裝飾器對money進行裝飾,那么會自動添加一個叫money的屬性,當調用獲取money的值時,調用裝飾的方法 @property def money(self): return self.__money # 使用裝飾器對money進行裝飾,當對money設置值時,調用裝飾的方法 @money.setter def money(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型數字") a = Money() a.money = 100 print(a.money)
