在ruby的stdlib中可转发

forwardable的Python项目详细描述


通过委托轻松组合对象的实用程序。大致从 Ruby的forwardable标准库

要求

Python2.7或3.3 w/标准库。可能对其他版本的 Python也是

安装

$ pip install forwardable

用法

最常见的用例

@forwardable.forwardable()decorator允许您使用 def_delegator()def_delegators()在类定义块中。

使用def_delegators()定义多个attr转发:

fromforwardableimportforwardable@forwardable()# Note the () here, which is required.classFoo(object):def_delegators('bar','add, __len__')def__init__(self):self.bar=set()foo=Foo()foo.add(1)# Delegates to foo.bar.add()assertlen(foo)==1# Magic methods works, too

放松点,哈

定义单个转发

如果您只需要将一个方法委派给被委派者,只需 使用def_delegator

fromforwardableimportforwardable@forwardable()classFoo(object):def_delegator('bar','__len__')def__init__(self):self.bar=set()assertlen(Foo())==0

它应该工作得很好。实际上,def_delegators()调用 def_delegator()在引擎盖下。

采摘

fromforwardableimportforwardable@forwardable()classMyDict(object):def_delegator('dct.get','__call__')def__init__(self):self.dct={'foo',42}d=MyDict()# Equivlant to d.dct.get('foo')assertd('foo')==42

不那么神奇的用法

@forwardable()decorator将def_delegator{,s}注入 模块作用域是临时的,这就是为什么不必导入它们 明确地。这是公认的魔法,但不鼓励使用 共import *在任何时候输入较少的字符总是很好的 没必要

如果你不愿意使用这种注射魔法,只需明确地说 from forwardable import def_delegator, def_delegators,用于 一个类定义,你就没事了。

许可证

麻省理工学院执照。

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

推荐PyPI第三方库


热门话题
java Hibernate:合并并删除,而不是从数据库中删除实体对象   java如何在WebFilter中有条件地从Mono返回?   java调用mysql c3p0函数   可执行jar Java jar文件加载错误:无法找到或加载主类。类导致的错误:java。lang.ClassNotFoundException:某些东西。班   java如何减少/更改爬网后的延迟?   从其他语言(如Java、PHP、Perl、Python等)调用C/C++代码的最佳方式是什么?   java如何模拟影响对象的void返回方法   当我试图在ubuntu上启动JavaScala时,它抛出了一个异常   java如何正确输出游戏   理解java和C++背景下的JavaScript原型   oracle如何将Java函数转换为postgresql函数   多线程为什么我的java服务器程序在超时后不退出?   java如何使listView中的按钮在单击时工作?   试图将这个嵌套的java forloop转换为python,但我不知道如何转换。有没有一种方法可以像这样为循环执行if语句?   java幂函数在计算器中的应用   如何在java中滚动浏览mysql数据库   在Spring Boot应用程序的JUnit测试中,java没有符合自动连线JPA存储库要求的bean   java如何使用扩展类的JPanel对象?