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

这是我写的一个根据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,对象找不到该属性

阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题