python - 打印出一个对象的所有属性的文档字符串,但需要一个装饰器才能清晰
问题描述
这是一个粗略的代码,它将每个属性的文档字符串一个接一个地打印到一个对象。我需要装饰一个类内部的函数,以便我可以清楚地区分不同的属性文档字符串。如果您对实际代码也有建议以使其成为 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)
解决方案
您绝对应该使用getattr
lookup 而不是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
推荐阅读
- pandas - (Pandas Dataframes)如何让行从具有重复列名的数据框中共享同一列
- python - 如果python正在复制一个对象,如何停止它?
- python - 在 Python 中连接 2 个列表的运行时
- python - 为什么我的计算不能在另一个函数中调用的函数中执行?
- react-native - React Native,Formik-Yup 验证的错误未显示
- c# - C# 类型名称未知但已声明
- c# - 如何仅在 azure devops CI env 中而不是在本地运行一些 NUnit 测试
- python - 如何在 Pandas 中使用非数字数据做数据透视表?
- android-studio - 如何将数据从 MainActivity 传递到 KOTLIN ANDROID STUDIO 中的 Recyclerview 适配器
- excel - 填充二维数组