如何解决Java括号显式类型转换的Python等价物
我有这样一种并行继承的情况:
class FruitColor:
# general colors
def __init__(self,name):
self.name = name
class Fruit:
def __init__(self,color:FruitColor):
self.color:FruitColor = color
class CitrusColor(Color):
# specialized colors
def __init__(self,name):
super.__init__(name)
def be_citrus(self):
print('i am a citrus color')
class CitrusFruit(Fruit):
def __init__(self,color:CitrusColor):
super().__init__(color)
在我的程序后期,我做这样的事情:
orange:CitrusFruit = CitrusFruit(CitrusColor('bloodorange'))
orange.color.be_citrus()
我相信这应该会执行得很好,因为 orange.color
是一个 CitrusColor
实例,尽管我已经在超构造函数中输入暗示它是一个 FruitColor
。
但是,我的 IDE 抱怨 be_citrus
不是 FruitColor
的成员。有没有办法像我在 Java 中那样显式地对子类进行类型转换?
((CitrusColor) orange.color).be_citrus()
解决方法
是的,使用 typing.cast
:
from typing import cast
cast(CitrusColor,orange.color).be_citrus()
给阅读本文的人的提示,这当然在运行时什么都不做,这只是告诉任何第三方工具(如 mypy
),出于静态类型检查结果的目的orange.color
可以被视为 CitrusColor
(它已经在运行时)。
无论有没有它,您的程序都会以完全相同的方式运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。