python元数据
metabeyond的Python项目详细描述
metabeyond-用于现代python代码的元数据实用程序
一组小实用程序,用于编写自文档化代码,并允许对应用的元数据进行内省。 在运行时以类似于Java6注释接口的方式使用decorators。整个模块都很重 受Java6注释的影响,例如下面的无意义示例:
@Configuration@FunctionalInterface@SafeForSpeedsNotExceeding(value=1.15572735,units=ATTOPARSECS_PER_MICROFORTNIGHT)publicclassQuantumDecoherenceStabilizer{@HaikupublicvoidcheckNodes(){if(tree.hasAnyRealLeafNodes()){freshenLeavesOn(tree);}}}
因此提供以下python解决方案:
@Configuration()@FunctionalInterface()@SafeForSpeedsNotExceeding(value=1.15572735,units=ATTOPARSECS_PER_MICROFORTNIGHT)classQuantumDecoherenceStabilizer:@haikudefcheck_nodes(self)->str:iftree.has_any_real_leaf_nodes():freshen_leaves_on(tree)
(有关更深奥的注释示例,请参见Google Annotation Gallery!)
提示
提示的目的是为sphinx之类的实用程序向docstring添加一些描述。使用背后的想法 作为decorator,decorator通常比docstring中的文本对读者更可见,所以 这是一种利用可读性的简单方法。除了操作docstring之外,没有对这个decorator的引用 一直被保留着。它本质上是透明的。
- 提示的定义:
frommetabeyondimporthintshaiku=hints.Hint('This is designed to be poetic to read.')
- 应用提示。提示在装饰中的名称后面永远不会有括号。
@haikudefbasho():"""old pond"""frog.leap()inwatersound()
- 这提供了以下效果:
>>>importinspect>>>get_docstring=lambdao:inspect.cleandoc(inspect.getdoc(o))>>>print(get_docstring(basho))oldpondThisisdesignedtobepoetictoread.
备注
备注是从提示开始的下一步,旨在将自己注册到要检测的类或函数中 稍后。这类似于java 6注释的工作方式。
- 定义备注
frommetabeyondimportremarksclassBean(remarks.Remark):"""Marks the object as a bean."""
- 应用评论。注释总是有括号。未能添加括号将导致修饰项 被装饰器替换,否则将被调用,这将导致任何依赖代码中断,所以不要 试试看。
@Bean()defbar():return69# lol
- 我们可以提供更复杂的定义,其中包含修饰元素的验证约束,或者 每个装饰特有的属性。有关完整的解释,请参见文档,但下面给出了您 总的想法。这个例子定义了一个路由装饰器,类似于 flask。将它应用于类将导致失败。
classRoute(remarks.Remark,constraint=inspect.isfunction):def__init__(self,route):self.route=route@Route('/about-me')defabout_me():...
- 检查任何应用的备注也很容易。
>>>frommetabeyondimportremarks>>>remarks.get_remark(Route,about_me)Route(route='/about_me')
其他以各种方式进行搜索和查询的方法可以在文档中找到。