问题描述
我有一个CSP风格的系统,其中每个通道的每种消息类型(通常是数据类,但不一定是)可以不同。我发现自己需要多次重复以下模式。
一个过程将定义它期望的特定消息类型(下面的Example
数据类),但是应该利用Python的鸭子模式,从而使您可以传递任何结构等效的消息。因此,需要Protocol
与mypy进行检查。
Protocol
不可实例化,因此它们必须是单独的类。这会导致代码重复,并在名称空间中添加一个与预期类型不同的名称,这似乎不那么理想,这使得Sphinx生成的文档可读性较低。这似乎非常不可思议。
有什么方法可以避免必须创建第二类和名称?如果没有,是否有某种方法可以根据另一类自动定义一个?如果不是这样,是否有某种方法可以重用具体类的Protocol
类中的字段注释?
class ExampleProtocol(Protocol):
a: int
b: str
c: Any
@dataclass
class Example(ExampleProtocol):
a: int
b: str
c: Any
def uses_examples(example: ExampleProtocol) -> None:
pass
在理想的世界中,我感觉像下面的代码一样可行。
@dataclass
class Example:
a: int
b: str
c: Any
def uses_examples(example: Interface[Example]) -> None:
pass
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)