@functools.singleDispatchMethod的后台端口到python 2.7-3.7。

singledispatchmethod的Python项目详细描述


来自@functools.singledispatchmethoddecorator[1]的后台端口 Python3.8到Python2.7-3.7。这些代码只有大约30行,但是 何必为仿制意大利面而烦恼呢?

$ pip install singledispatchmethod

decorator将方法转换为单个分派[2]泛型 函数[3]。注意,由于分派发生在 第一个非self或非cls参数,必须创建函数 相应地:

fromsingledispatchmethodimportsingledispatchmethodclassNegator:@singledispatchmethoddefneg(self,arg):raiseNotImplementedError("Cannot negate a")@neg.registerdef_(self,arg:int):return-arg@neg.registerdef_(self,arg:bool):returnnotarg

@singledispatchmethod支持与其他装饰器(如 @classmethod。但是,为了公开dispatcher.register@singledispatchmethod必须是最外面的装饰符。这是 Negator类,neg方法是类绑定的:

fromsingledispatchmethodimportsingledispatchmethodclassNegator:@singledispatchmethod@classmethoddefneg(cls,arg):raiseNotImplementedError("Cannot negate a")@neg.register@classmethoddef_(cls,arg:int):return-arg@neg.register@classmethoddef_(cls,arg:bool):returnnotarg

相同的模式可以用于其他类似的装饰器,例如 @staticmethod@abstractmethod。请注意,因为 @singledispatchmethoddecorator基于 @functools.singledispatch,支持类型注释 dispatcher.register仅在python 3.7之后。

[1]https://docs.python.org/3.8/library/functools.html#functools.singledispatchmethod
[2]https://docs.python.org/3.8/glossary.html#term-single-dispatch
[3]https://docs.python.org/3.8/glossary.html#term-generic-function

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

推荐PyPI第三方库


热门话题
JavaGWT:何时使用Lazydemelement?   Java中跟踪消失线程的多线程处理   java Springboot未能配置数据源:“url”,但我没有使用数据库   java为按钮生成随机位置   math Java:包含二项式系数计算的表达式   java通过AsyncTask传递参数   从路径错误创建java文件   高流量网站的性能播放框架、Java、Apache、PostgreSQL、JPA和Hibernate   java将4D矢量转换为长矢量   arraylist Java循环在没有任何错误的情况下终止   java正在制作一个计算器应用程序,希望在第二个片段中更新历史,但无法完成   java将信息从IntentService发送到Activity   java如何在游戏中插入大量实体!工作   javascript如何在ScriptEngineforJava中从数学中获得准确的结果?