python类属性周围的装饰器/包装器

python类属性周围的装饰器/包装器,python,python-2.7,properties,wrapper,Python,Python 2.7,Properties,Wrapper,我正在尝试增强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):

我正在尝试增强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
由于我是这样学习的,出于良好实践的原因,我想将
wrapps
装饰器应用于包装器。但是如果我把包装纸写成

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>
A=MyClass(5)
阿福
>>> 
这不是我所期望的。有什么建议吗?

用这个:

def MyProperty(func):

    @wraps(func)
    def getter(self):
        """Enhance the property"""
        return func(self) + 1

    return property(getter)