Python 相当于 Java 括号显式类型转换
Python equivalent for Java parenthesis explicit typecast
我遇到了这样的并行继承情况:
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
(它已经在 运行 时间)。
您的程序将运行 以完全相同的方式有或没有它。
我遇到了这样的并行继承情况:
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
(它已经在 运行 时间)。
您的程序将运行 以完全相同的方式有或没有它。