私は Python のプロパティ マジックを学ぶために時間を費やしました。しかし、単純なケースを小さな間違いで書いていると、奇妙な結果が得られます。これが私のコードです:
class PropertyShow(object):
def __init__(self):
self.__num = 90
def setNum(self,value):
self.__num = value
def getNum(self):
return self.__num
def delNum(self):
del self.__num
#num = property(getNum,setNum,delNum)
# I made a mistake here!
__num = property(getNum,setNum,delNum)
class PropertyTwo(object):
def __init__(self):
self.__num = None
@property
def num(self):
"""OK, use a decorator, you can do something here!"""
return self.__num
@num.setter
def num(self,value):
self.__num = value
@num.deleter
def num(self):
del self.__num
one = PropertyShow()
print one.num
two = PropertyTwo()
print two.num
要点は「num = property(getNum,setNum,delNum)」です。この行をこの不注意に変更して、「__num = property(getNum,setNum,delNum)」のようになりました。
このコードの結果:
File "property.py", line 6, in setNum
self.__num = value
RuntimeError: maximum recursion depth exceeded
num
に置き換えると、なぜこの予期しない結果が得られるの__num
ですか?- プライベート変数の魔法を理解する方法
property()
と、なぜプライベート変数を使用する必要があるのですか?*