部分映射专用化的python/generic类型提示

2024-04-19 07:59:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于对映射使用部分专门化时的类型提示的问题。在

请参阅下面的示例代码:类型PairLeftRight是一种Dict[Side, Any]。在

函数test_pair将接受一个特殊类型:PairLeftRight[MyClass]。在

我希望能够向这个函数添加类型提示,这样我的IDE(pycharm)可以帮助我自动完成“MyClass”中的可用方法

有可能吗?在

import typing
from enum import Enum

VT = typing.TypeVar('T')  # Any value type.

class Side(Enum):
    Left = "Left"
    Right = "Right"
Sides = [Side.Left, Side.Right]

class PairLeftRight(typing.Dict[Side, VT]):
    pass

class MyClass(object):
    def __init__(self, name):
        self.name = name
    def hello(self):
        print("Hello " + self.name)

# Here, I want to speficy that the input is a PairleftRight[MyClass]
def test_pair(pair : PairLeftRight[MyClass]):
    for side in Sides:
        # Here I would like my IDE (pycharm) to help me by auto-completing
        # the available methods in `MyClass`
        pair[side].hello()

def test():
    a = PairLeftRight()
    a[Side.Left] = MyClass("Robert")
    a[Side.Right] = MyClass("Melissa")
    test_pair(a)

test()

Tags: nametestselfrighttyping类型defmyclass