【发布时间】:2018-02-07 09:34:34
【问题描述】:
目前我有这个代码:
class Value:
def __init__(self, data: Any):
self.data = data
# ...and much more than this
def convert_value(self, value_type: Type['Value']) -> 'Value':
return value_type(self.data)
class BooleanValue(Value):
pass
convert_value 方法将Value 的实例转换为作为参数传递的value_type 的实例。例如:
value = Value(123)
new_value = value.convert_value(BooleanValue)
在这种情况下,new_value 的类型为 BooleanValue。我认为没有必要这样做(应该有更好的方法):
new_value: BooleanValue = value.convert_value(BooleanValue)
目前 PyCharm 知道我返回了一个 Value 实例,但我希望它通过键入返回一个 BooleanValue 来理解。
我试着这样做:
T = TypeVar('T', 'Value')
class Value:
# Other methods
def convert_value(self, value_type: Type[T]) -> T:
return value_type(self.data)
但 PyCharm 声称 value_type 不可调用。
问题:如何让PyCharm明白该方法返回的对象是value_type类型?
【问题讨论】:
标签: python-3.x pycharm python-3.6 typing