问题标签 [single-dispatch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Travis pylint 构建失败并出现关于单次调度的错误
我的 Travis 构建目前在 pylint 失败并出现错误:
我目前用于 pylint 的构建命令是:
它适用于我的本地 Windows 机器(在 bash shell 中)。我的构建脚本的其余部分是:
我应该如何解决这个错误?提前致谢。
python - 装饰后更新单调度重载
前言
我正在使用带有装饰器的单一调度,例如functools.singledispatch
serialize_int
现在如果我想有条件地装饰
然后打电话
正如我们所看到的,它调用了“旧”的、未修饰的版本。发生这种情况是因为我们只注册了“旧的”一个重载并且serialize
对装饰一无所知,因为它是一个新的函数对象。
问题
如何修改重载,以便“调度程序”功能将获取更改?
我知道serialize_int
装修后我们可以重新注册,但是看起来是代码重复的问题,还有其他方法吗?
或更笼统地说:我们能以某种方式就地修改函数对象吗?装饰__call__
属性无济于事。
python - 使包装器对象与@singledispatch 兼容?
假设我有这样的课程:
代码库的其他地方是使用 @singledispatch 装饰器的通用函数。我希望“包装”的实例表现得好像它们从未被包装过。因此,例如,pprint(Wrapper({}))
将像pprint({})
我怎样才能做到这一点?
python-3.x - 对解压的多个参数进行单次调度
我已经fancyfunction
定义了对单个参数做某事。我把它装饰成一个通用函数,这样它就知道如果给它一个元组该做什么。
果然,上面两个函数的有效调用签名是:
我想做的事
我想简化调用签名,这样我就不需要额外的括号:
为了做到这一点,我需要重载函数来解包它的位置参数:
当然,上面的最后一个代码片段不起作用。这样做:
将调用泛型函数而不是重载函数。
是否可以singledispatch
识别装饰函数是使用*
-form of arguments 调用的?PS这种呼叫签名的正式名称是什么?
python - functools 库的示例不可重现
我正在研究functools
python中的图书馆。但是,当我从装饰器的文档中复制示例时
@singledispatch
我没有得到与文档中报告的结果相同的结果。
应评估为:
但在我的 juypter notebook 中却没有。
python - 如何在类与实例上进行单一调度
这本质上是一个语法糖问题,所以如果你不赞成在这种事情上付出努力,请不要再读了。
考虑以下不起作用的玩具示例:
我想要做的是创建包含幻方行或列的实例,_data
具体取决于我是否使用rows_or_cols(idx)
或rows_or_cols[idx]
. 使事情复杂化的是我也想__getitem__
在实例上可用,所以我可以通过rows_or_cols(ri)[ci]
or选择一个单一的元素rows_or_cols[ci][ri]
。
什么不起作用是rows_or_cols[i]
位
我认为原因是这个https://stackoverflow.com/a/12447078/7207392
在这篇文章中,他们还建议使用元类。但是,我宁愿避免使用它们,因为我害怕元类冲突。
有什么建议(包括那些告诉我整件事一开始就是个愚蠢的想法的建议)?
python - python:范围类中的多个构造函数(__init__签名),怎么可能?
python - Pythonic(OO)根据对象类型选择类方法的方式
有没有更好的Pythonic / Object Oriented方式来选择在运行时执行哪个特定的类方法,具体取决于对象的类型,因为使用该type()
方法不被认为是优雅的(?)
我为我正在使用的三种数据类型编写了以下代码。它基本上将不同的函数作为值存储在字典中,并将其与其对应的对象类型作为键配对:
它给出以下输出:
还有什么技术术语,我想在这里做什么?我认为这可能与单调度、函数重载或多态性有关,但我不确定。
python - 如何结合@singledispatch 和@lru_cache?
我有一个像这样的 Python 单调度通用函数:
它像这样重载:
第二个基本上预处理一个QuerySet
对象并调用通用cluster()
函数。一个QuerySet 是一个 Django 对象,但它不应该在这里发挥作用;除了它是可散列的,因此可以与lru_cache
.
通用函数不能被缓存,因为它接受诸如列表之类的不可散列的对象作为参数。但是,重载函数可以被缓存,因为QuerySet
对象是可散列的。这就是我添加@lru_cache()
注释的原因。
但是,似乎没有应用缓存:
我希望在一个实例中进行相同的调用,但是:
缓存统计数据证实了这一点:
更改@lru_cache
和@.register
注释的顺序似乎没有什么区别。
这个问题类似,但答案不适合单个功能级别。
甚至可以在这个级别上结合这两个注释吗?如果是这样,怎么做?
python-3.x - 将单调度与自定义类一起使用(CPython 3.8.2)
假设我想为名为“MacroMethods”的模块中的每个类设置函数。所以我在'Fluent Python'中看到它后设置了singledispatch,如下所示:
期望的行为是 - 当类 'MacroMethods.Wait' 的实例作为参数给出时,singledispatch 运行具有该类类型的注册函数。
相反,它运行默认功能而不是注册功能。
但是, type() 清楚地显示实例是类“MacroMethods.Wait”,并且 dict_keys 属性也包含它。
我怀疑我制作的所有自定义类都算作“对象”类型,并且没有在结果中运行所需的函数。
有什么办法可以解决这个问题?完整的代码在这里。
更新
我设法模仿singledispatch
的动作如下:
像这样使用:
但仍然不是singledispatch
,所以我发现将其发布为答案可能不合适。