declarative包含类修饰符,用于以django模型类的样式定义具有子类语义的类。
tri.declarative的Python项目详细描述
三.声明性
tri.declarative包含使编写声明性代码更容易的工具。这包括:
- 类装饰器 以django模型类的样式定义具有子类语义的类
- 递归地计算复杂数据结构中的嵌入lambda表达式
- 递归地过滤复杂数据结构
- 关键字参数调度
- 获取/设置给定路径字符串的属性 (例如‘foo-bar-baz’)
类装饰器
只需几行代码,就可以将api从:
quux=Foo(things=[Bar(name='a',param=1),Bar(name='b',param=2),Bar(name='c',param=2)],baz=3)
入:
classQuux(Foo):a=Bar(param=1)b=Bar(param=2)c=Bar(param=2)classMeta:baz=3
如果方便的话,你还可以使用第一种款式!
下面是关于声明性的更详细用法示例。
评估
d=dict(foo=lambdax:x*2,bar=lambday:y+5,baz=[foo=lambdax:x*6,],)# evaluate only one levelassertevaluate(d,x=2)==dict(foo=4,bar=lambday:y+5,# this function doesn't match the signature so isn't evaluatedbaz=[foo=lambdax:x*6,# one level down so isn't evaluated],)# evaluate recursivelyassertevaluate_recursive(d,x=2)==dict(foo=4,bar=lambday:y+5,# this function doesn't match the signature so isn't evaluatedbaz=[foo=12,],)
过滤
d=dict(foo=dict(show=False,x=1,),bar=dict(show=True,x=2,),)assertfilter_show_recursive(d)==dict(bar=dict(show=True,x=2,),)
关键字参数调度
@发送:
@dispatch(bar={},baz__foo=2)deffoo(bar,baz):do_bar(**bar)do_baz(**baz)
获取/设置给定路径字符串的属性
classFoo(object):def__init__(a):self.a=aclassBar(object):def__init__(b):self.b=bclassBaz(object):def__init__(c):self.c=cx=Foo(Bar(Baz(c=3)))assertgetattr_path(x,'a__b__c')==3assertsetattr_path(x,'a__b__c',10)assertgetattr_path(x,'a__b__c')==10
运行测试
您需要安装TOX,然后只需进行测试