1

Pythonで.NETからのデータ注釈検証と同じ概念を実装する方法を特定しようとしています。次のようになります。

class MyClass:
    @Property
    def Message(self):
        return self._message

    @Message.setter
    @MaxValue(233)
    def Message(self, value):
        self._message = value

私はさまざまなアプローチを試しましたが、成功しませんでした。特定の検証を適用するために、「value」引数にアクセスしたいと思います。

4

1 に答える 1

1

これは役に立ちますか?

このようにして、追加の引数を使用してPythonアノテーションを作成できます

def MaxValue(maxValue):
    def wrapFunction(function):
        def replacedMaxValueFunction(self, value):
            assert value <= maxValue
            return function(self, value)
        replacedMaxValueFunction.__name__ = function.__name__
        return replacedMaxValueFunction
    return wrapFunction

これで、これを実行できます。C#に準拠しているかどうかはわかりませんが、希望するチェックが行われることを願っています。

>>> @MaxValue(123)
def f(self, value):
    print(value)
>>> f(1, 123)
123
>>> f(1, 124)
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    f(1, 124)
  File "<pyshell#1>", line 4, in replacedMaxValueFunction
    assert value <= maxValue
AssertionError
于 2013-03-09T13:14:21.117 に答える