python - 如何在 Python 中注释 mixin
问题描述
我有一个独立的函数,它使用super()
, 并像这样使用它:
import typing
from abc import ABC
class Foo(typing.Protocol):
def foo(): raise NotImplementedError
def free_foo(child):
super(child.__class__, child).foo()
class Base(ABC):
pass
class Parent1(Base):
def foo(self): pass
class Child1(Parent1):
foo = free_foo
class Parent2(Base):
def foo(self): pass
class Child2(Parent2):
foo = free_foo
如何注释free_foo
函数?我需要指出这child
既是协议的实例Base
又符合Foo
协议?
解决方案
我发现父类的正确顺序可以解决问题:
from abc import ABC
class FooBase(Foo, Base, ABC):
pass
def foo(child: FooBase): pass
mypy 似乎对此很满意。
推荐阅读
- python - 使用 S3FS 访问 TFX 管道中的 S3 存储桶对象
- laravel - npm run dev 不做任何拉动 - laravel
- ios - SwiftUI - 如何在编辑时删除列表左侧的巨大空间
- javascript - 数组重复值数量的正确结果
- javascript - async / await 函数和返回值
- nginx - 将非 2xx 请求的请求正文发送到 syslog nginx
- node.js - 使用 http-proxy-middleware NodeJS 在互联网上代理图像文件
- ftp - PhpStorm - FTP 错误日志位于何处?
- python - 如何从终端中的先前运行中获取变量值?
- amazon-web-services - 如何修复错误在使用 Amazon 的 S3 和 Cloudfront 时,请求的资源上不存在“Access-Control-Allow-Origin”标头