プロパティを使うのは初めてなので、以下のような簡単なテストをまとめました。私のテストでは、2つのクラス「Test1」と「Test2」を作成しました。それぞれが1つの値を保持することを目的としています。プロパティを使用して、疑似非表示の「val」属性へのアクセスを管理しようとしています。このプログラムは概念実証としてのみ意図されていたため、この現在のテストは「val」属性の入力または出力を制限しません。以下に示す2つのテストクラスは同じ結果をもたらし、プロパティを構築するための異なるメソッドを表すことになっています。私が参照しているプロパティの使用例は、ここのpythonドキュメントにあります。
ドキュメントによると:
cがCのインスタンスである場合、cxはgetterを呼び出し、cx = valueはsetterを呼び出し、delcxはdeleterを呼び出します。
ここで、Cはテストクラスです。値を設定することで、_valを変更し、valをプロパティとして残すと思いました。ただし、プロパティセッターにアクセスする私の方法は、5
間違っていない限り、実際にはプロパティを整数に置き換えているように見えます。誰かが私の混乱を明らかにしてくれることを願っています。
class Test1:
def __init__(self):
self._val = 0
def setVal(self,newVal):
self._val = newVal
val = property(lambda self: self._val, setVal, None, "Property for value")
def __str__(self):
return "Value: {}".format(self.val)
class Test2:
def __init__(self):
self._val = 0
@property
def val(self):
return self._val
@val.setter
def setVal(self,newVal):
self._val = newVal
def __str__(self):
return "Value: {}".format(self.val)
def verify(a):
print("\nCheck with {}".format(a.__class__.__name__))
print("Value check:",a.val)
a.val = 5
print("Value after a.val = 5 is:",a.val)
print("The actual value is:",a._val)
def main():
verify(Test1())
verify(Test2())
if __name__ == '__main__':
main()