2013-03-09 3 views
0

Я пытаюсь определить способ реализации той же концепции, что и проверка аннотации данных от .NET в Python. Это будет примерно следующее:Python 3.x - Проверка аннотации данных эквивалентна

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

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

Я пробовал разные подходы, но без успеха. Я хотел бы получить доступ к аргументу «значение», чтобы применить к нему определенную проверку.

ответ

1

Помогло ли вам это?

Таким образом, вы можете сделать питон аннотации с дополнительными аргументами

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 
+0

Да, так оно и есть. Большое спасибо за подсказку. Это очень ценится. –