如何在Python类的方法内部访问模块的文档字符串(docstring)
如何在类方法内部访问模块的文档字符串
在方法内部,__doc__会优先指向当前方法的文档字符串,要访问模块级别的__doc__,可以用以下几种实用方式:
方法一:通过sys.modules获取当前模块引用
导入sys模块后,利用sys.modules[__name__]获取当前模块对象,再访问它的__doc__属性,这是最通用的方式,不管模块文件名是什么都能生效:
"""Module documentation.""" import argparse import sys class HandleArgs: """Class documentation""" def __call__(self): """Method documentation""" # 访问模块的文档字符串 module_doc = sys.modules[__name__].__doc__ parser = argparse.ArgumentParser(description=module_doc)
方法二:在模块级别存储文档字符串
直接在模块顶部把__doc__赋值给一个变量,后续在方法里直接引用这个变量,写法更直观:
"""Module documentation.""" import argparse # 把模块文档字符串存到变量里 MODULE_DOC = __doc__ class HandleArgs: """Class documentation""" def __call__(self): """Method documentation""" parser = argparse.ArgumentParser(description=MODULE_DOC)
方法三:直接引用模块名(如果已知)
如果明确知道当前模块的名称(比如模块文件名为args_handler.py),可以直接用模块名访问__doc__,但这种方式灵活性差,模块重命名后需要同步修改代码:
"""Module documentation.""" import argparse import args_handler # 导入自身模块 class HandleArgs: """Class documentation""" def __call__(self): """Method documentation""" parser = argparse.ArgumentParser(description=args_handler.__doc__)
另外注意你的原代码存在语法错误:class HandleArgs()需修正为class HandleArgs:(无继承时无需括号),def __call__()需修正为def __call__(self):(类方法必须包含self参数),上面的示例已同步修正这些问题。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

