Я пытаюсь улучшить поведение по умолчанию @property
в Python:
from functools import wraps
def MyProperty(func):
def getter(self):
"""Enhance the property"""
return func(self) + 1
return property(getter)
class MyClass(object):
def __init__(self, foo):
self._foo = foo
@MyProperty
def foo(self):
return self._foo
Все это работает очень хорошо, я получаю желаемый эффект
A = MyClass(5)
A.foo
>>> 6
Так как я научилсяпоэтому я хочу применить декоратор wraps
к обертке по соображениям хорошей практики. Но если я напишу оболочку как
def MyProperty(func):
@wraps
def getter(self):
"""Enhance the property"""
return func(self) + 1
return property(getter)
, я получу
A = MyClass(5)
A.foo
>>> <__main__.MyClass object at 0x7f209f4aa0d0>
Это не то, что я ожидаю. Есть предложения?