gpt4 book ai didi

python - 结合单一调度和协议(protocol)

转载 作者:行者123 更新时间:2023-12-05 04:35:40 25 4
gpt4 key购买 nike

我在将单分派(dispatch)重载与基于具有特定属性的结构类型化协议(protocol)相结合时遇到了一些问题。我构建了以下代码片段以了解我正在尝试的内容。

from typing_extensions import Protocol
from functools import singledispatch


class HasFoo(Protocol):
foo: str


class FooBar:
def __init__(self):
self.foo = 'bar'


@singledispatch
def f(_) -> None:
raise NotImplementedError


@f.register
def _(item: HasFoo) -> None:
print(item.foo)


x = FooBar()
f(x)

上面的代码引发了 NotImplementedError 而不是所需的 print 语句。我已尝试对上述内容进行各种修改,但均未成功。任何帮助将不胜感激。

最佳答案

这显然行不通。单次分派(dispatch)使用 MRO(方法解析顺序)来确定给定实例是否与注册类型匹配。但是,该协议(protocol)不是 MRO 的一部分,因此 python 找不到它。要使其成为 MRO 的一部分,您可以继承它,但这不是协议(protocol)的用途(尽管我认为它也不需要任何成本)。

关于python - 结合单一调度和协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70986620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com