代码如下:
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)