在python 3中使用较少的参数派生泛型类型

时间:2016-06-15 22:34:11

标签: python generics typing

我有代码,我用两个类型变量定义泛型类:

Selected = ty.TypeVar('Selected')
SelectionIDs = ty.TypeVar('SelectionIDs')
class GenericSelection(col.UserDict, ty.Mapping[SelectionIDs, Selected]):
    def __init__(self):
        super().__init__()

然后我想派生前一个泛型类的子类,我想在其中指定一个类型变量作为整数序列(在这种情况下是一个索引)。

class IndexedSelection(GenericSelection[int, Selected]):
    def __init__(self):
        super().__init__()

然后我想将Selected type变量定义为特定类型的对象,比如str,根据documentationPEP 483这是允许的。

class StrSelection(IndexedSelection[str]):
    def __init__(self, strings: ty.Sequence[str], sel: ty.Sequence[int]):
        super().__init__()
        for sel_idx in sel:
            self[sel_idx] = strings[sel_idx]

然而,我收到错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/salotz/Dropbox/tutorials/python_types/typing_class.py in <module>()
     47         super().__init__()
     48 
---> 49 class StrSelection(IndexedSelection[str]):
     50     def __init__(self, strings: ty.Sequence[str], sel: ty.Sequence[int]):
     51         super().__init__()

/home/salotz/anaconda3/lib/python3.5/typing.py in __getitem__(self, params)
    968             if len(params) != len(self.__parameters__):
    969                 raise TypeError("Cannot change parameter count from %d to %d" %
--> 970                                 (len(self.__parameters__), len(params)))
    971             for new, old in zip(params, self.__parameters__):
    972                 if isinstance(old, TypeVar):

TypeError: Cannot change parameter count from 2 to 1

也许我误解了Generic类型的作用,因为周围没有很多例子。我错过了一些让这个工作的东西吗?

0 个答案:

没有答案