【问题标题】:How to specify the return type based on function's argument?如何根据函数的参数指定返回类型?
【发布时间】: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


    【解决方案1】:

    你的类型提示是正确的,它是 PyCharm 中的 bug

    【讨论】:

    • 谢谢@user2235698!
    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2020-11-13
    • 2021-04-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多