首页 > 解决方案 > 打印出一个对象的所有属性的文档字符串,但需要一个装饰器才能清晰

问题描述

这是一个粗略的代码,它将每个属性的文档字符串一个接一个地打印到一个对象。我需要装饰一个类内部的函数,以便我可以清楚地区分不同的属性文档字符串。如果您对实际代码也有建议以使其成为 Pythonic,请同时发表评论,以改善我的想法

def classtype(objecttype):

    obj_string=str(objecttype).split("'")[1]
    def direct(obj):
        '''Returns a list of attributes of an object that a python beginner should know'''
        return [a for a in dir(obj) if not a.startswith('__')]

    attributes=direct(objecttype)

    def docstrings(obj_string,attribute):
        '''calls the docstring for a particular attribute'''
        string='{}.{}.__doc__'.format(obj_string,attribute)
        return eval(string)

    for attr in attributes:
        print(docstrings(obj_string,attr))

classtype(list)

标签: pythonpython-3.xpython-decoratorsdoc

解决方案


您绝对应该使用getattrlookup 而不是eval. 如果你不传递它们,那么拥有内部函数也没有多大意义。

def classtype(obj):
    attributes = [a for a in dir(obj) if not a.startswith('__')]
    for attr in attributes:
        print(getattr(obj, attr).__doc__)  # Maybe print attr as well?

如果问题是您看不到装饰函数的文档字符串,请确保您的包装装饰器正在使用functools.wraps


推荐阅读