python - 有没有办法制作元函数/元初始化器?
问题描述
我在学习 Meta 类时编写了这个小代码,它只是将我所有的类文档注册到具有给定 Meta 类的所有类的全局变量中:
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 '}
解决方案
你可以写一个装饰器:
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 '}
这还具有在类上工作的优点:
@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 '}
推荐阅读
- typescript - 包装在 StoreProvider 中时,React 组件变为空白
- asp.net-core-mvc - Jwt 令牌总是返回 401 .net core 3.1 web api
- javascript - 如何在javascript中找到净工资的值?
- postgresql - 使用 go 的 sqlx 在 postgres 表中插入记录并自动生成 ID
- ios - 解析 incrementKey 使 iOS 应用程序崩溃
- sass - 如何像在 React 中一样在 Preact 中简单地导入样式?
- python - 找到元素后的Break For循环
- javascript - 打印弹出模式窗口的内容
- lua - lua 中的脚本有问题,错误为零值(本地“xPlayer”)
- java - 如何在 Android Studio 的 datasnapshot/recyclerview 中创建条件?