程式碼如下:
#class Test(object):
def __init__(self):
self.__num = 100
def setNum(self,newNum):
print("----setter-----")
self.__num = newNum
def getNum(self):
print("----getter-----")
return self.__num
num = property(getNum,setNum) #get在前,set在后
#num = property(setNum,getNum) #set在前,get在后
t = Test()
print(t.getNum())
t.setNum(2000)
print(t.getNum())
print("----"*10)
t.num = 5000
print(t.num)
運行結果:
##在程式碼中,property的那一部分,get在前面,set在後面,執行結果正常。然後如果把set放在前面,get放在後面,程式就出錯了。
我想問下,這個為什麼跟位置還有關係呢?不是程式自動辨識的麼?為什麼換了位置就錯了?
我試了一下,錯誤訊息是:
TypeError: getNum() takes 1 positional argument but 2 were given
getter接收一個參數,setter接收兩個參數,互換了傳入的參數個數就不符了。
這個定義裡面是有順序的:
class property(fget=None, fset=None, fdel=None, doc=None)