我在学习元类时编写了这段小代码,该类只是将我所有的类文档注册到具有给定元类的所有类的全局变量中:
docs = {}
def register_docs(cls):
docs[cls.__name__] = cls.__doc__
class Meta(type):
def __new__(meta, name, bases, class_dict):
cls = type.__new__(meta, name, bases, class_dict)
register_docs(cls)
return cls
class RegDocs(metaclass=Meta):
'''
My Docs are here
'''
def __init__(self):
pass
print(docs)
{'RegDocs': '\n My Docs are here\n '}
是否有一种方法可以在__init__.py
中执行类似的操作,或者是否可以使用“元函数”对平面方法文件执行此操作?我希望能够访问一个global
,它具有与以下示例类似的方法信息,该方法在调用之前会对方法进行了一些初始化。
func_info = {}
@metafunc
def foo():
"""
My foo docs
"""
pass
print(func_info)
> {'foo':'\n My foo docs\n '}
答案 0 :(得分:1)
您可以写一个decorator:
func_info = {}
def metafunc(func):
func_info[func.__name__] = func.__doc__
return func
@metafunc
def foo():
"""
My foo docs
"""
pass
print(func_info)
# {'foo': '\n My foo docs\n '}
这具有also working on classes的优势:
@metafunc
class RegDocs(metaclass=Meta):
'''
My Docs are here
'''
def __init__(self):
pass
print(func_info)
# {'foo': '\n My foo docs\n ', 'RegDocs': '\n My Docs are here\n '}