隐藏页面特效

泛型协变和逆变

from typing import TypeVar, Generic class Beverage: """任何饮料""" class Juice(Beverage): """任何果汁""" class OrangeJuice(Juice): """使用巴西橙子制作的美味果汁""" T = TypeVar('T') class BeverageDispenser(Generic[T]): """一个参数化饮料类型的自动售货机""" def __init__(self, beverage: T) -> None: self.beverage = beverage def dispense(self) -> T: return self.beverage def install(dispenser: BeverageDispenser[Juice]) -> None: """安装一个果汁自动售货机""" juice_dispenser = BeverageDispenser(Juice()) install(juice_dispenser) orange_juice_dispenser = BeverageDispenser(OrangeJuice()) #类型检查会报错,不支持子类 install(orange_juice_dispenser) orange_juice_dispenser = BeverageDispenser(Beverage()) #类型检查会报错,不支持父类 install(orange_juice_dispenser) # 修改为 T_co = TypeVar('T_co', covariant=True) ❶#支持协变,支持子类,不支持父类 # T_co = TypeVar('T_co', contravariant=True) # 支持逆变,支持父类,不支持子类 class BeverageDispenser(Generic[T_co]): def __init__(self, beverage: T_co) -> None: self.beverage = beverage def dispense(self) -> T_co: return self.beverage def install(dispenser: BeverageDispenser[Juice]) -> None: """安装一个果汁自动售货机"""

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/17664961.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2020-08-29 django中使用celery异步发送邮件
2020-08-29 Celey异步发送邮件时报django.core.exceptions.ImproperlyConfigured的解决办法
2020-08-29 ubantu中安装redis及遇到的问题
2020-08-29 Celery异步处理任务时遇到的错误ValueError: not enough values to unpack (expected 3, got 0)
点击右上角即可分享
微信分享提示