python class 属性周围的装饰器/包装器
Decorator / wrapper around python class attribute
我正在尝试增强 Python 中的默认 @property
行为:
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>
这不是我所期望的。有什么建议吗?
使用这个:
def MyProperty(func):
@wraps(func)
def getter(self):
"""Enhance the property"""
return func(self) + 1
return property(getter)
我正在尝试增强 Python 中的默认 @property
行为:
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>
这不是我所期望的。有什么建议吗?
使用这个:
def MyProperty(func):
@wraps(func)
def getter(self):
"""Enhance the property"""
return func(self) + 1
return property(getter)