将额外的元数据集成到attr.ib()中

exttr的Python项目详细描述


PyPI versionsupported Python versionsTravis build statussource on GitHub

将额外的元数据集成到attr.ib()

示例

如果运气好的话,稍后会提供一个更好的例子,但是现在,这里有一些东西。

#python中的一个开发人员有兴趣让click构建它们attrs定义的配置对象。 这里有一个基本的解决方案,通过一个自定义的exttr关键字参数click=,在attrs类属性上定义click选项。

importcollectionsimportsysimportattrimportclickimportexttrexttr.register_keywords(exttr.Keyword(name='click'),)@attr.sclassConfiguration:foo=exttr.ib(click=click.option('--red'))defmain(configuration):print(configuration)defclicked_fields(cls):fields=collections.OrderedDict()forfieldinattr.fields(cls):decorator=exttr.get(cls,field.name,'click')ifdecoratorisNone:continuefields[field.name]=decoratorreturnfieldsdefbuild_click(f,cls,command_or_group):fields=clicked_fields(cls)defcli(*args,**kwargs):configuration=cls(*args,**kwargs)returnf(configuration)forname,decoratorinreversed(fields.items()):before=getattr(cli,'__click_params__',[])cli=decorator(cli)after=getattr(cli,'__click_params__',[])new=after[len(before):]iflen(new)==1:new,=newnew.name=namereturncommand_or_group(cli)click_main=build_click(f=main,cls=Configuration,command_or_group=click.command(),)sys.argv[1:]=['--red','burgundy']try:click_main()exceptSystemExit:pass

输出:

Configuration(foo='burgundy')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用多个参数的枚举   从Oracle到Redis的java复制表   java如何保护tomcat服务器中的db用户名和密码。xml   java如何使用注册密钥保护移动应用程序?   java在什么情况下超类不应该是抽象的?   java Backspace键在macOS上的Scala REPL中不起作用   arduino Java+Uno+RFID:调用方法读取Java中的RFID   带有where语句中集合的java JPA查询   java如何向基于Tyrus注释的客户端添加请求头   java对我的二进制搜索算法的反馈   java重新访问数据库时文件的内容不正确   用户在字符串中输入值后退出While循环(Java)   java如何在Maven中的多个项目之间共享项目依赖关系?   java Close从未在数据库上被明确调用   在java中从文件读入布尔矩阵   Java:如何使用父节点将XML流拆分为小型XML文档。VTDXML