如何在 Python 里装饰一个属性装饰器?

发布于 2022-09-07 21:06:22 字数 956 浏览 14 评论 0

这是我写的一个根据doc-string输出日志的


def log_attr(func):
    '''根据函数的doc-string输出日志'''
    doc = func.__doc__
    if func.__class__.__name__ == 'property':
        @property
        def warpper(self, *args, **kwargs):
            data = {}
            data.update({'type_name': self.type_name})
            if self.__class__.__name__ == 'People':
                data.update({'name': self.name})
            elif re.match(r"Question|Column|Collection|Topic", self.__class__.__name__):
                data.update({'name': self.title})
            elif re.match(r"Answer|Article", self.__class__.__name__):
                data.update({'name': self.author.name})

            log(doc.format(**data))
            return func.__get__.__call__(self, *args, **kwargs)  
        return warpper

当我把他用在一个属性时

@log_attr
@iter #返回一个生成器
@propery #避免 aaa()()的尴尬
def aaa(x):
    pass

显示AttributeError,对象找不到该属性

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文