繁体   English   中英

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM