类__init__中的TypeVar类型提示

砂光机

我正在尝试使用TypeVar将init参数指示为某种类型。但是我做错了,或者甚至没有可能。

from typing import TypeVar

T=TypeVar("T")

class TestClass:
    def __init__(self,value:T):
        self._value=value

a = TestClass(value=10)
b = TestClass(value="abc")

reveal_type(a._value)
reveal_type(b._value)

我希望的揭露类型是a._value曾经intb._value将会是string但是它们都显示为“ T`-1”

任何帮助或见解表示赞赏!

[编辑]

再扩展一点的例子。BaseClass将被覆盖,并且实际的类型提示由覆盖的类提供。

from typing import TypeVar

T=TypeVar("T")

class BaseClass:
    def __init__(self,value):
        self._value = value

class Class1(BaseClass):
    def __init__(self,value:str):
        super().__init__(value)

class Class2(BaseClass):
    def __init__(self,value:int):
        super().__init__(value)

a = Class1("A value")
b = Class2(10)

reveal_type(a._value)
reveal_type(b._value)
宫城先生

默认情况下,使用TypeVar只能将其范围限制为用作注释的方法/函数。为了将TypeVar限定于实例和所有方法/属性,请将类声明为Generic

from typing import TypeVar, Generic

T=TypeVar("T")

class BaseClass(Generic[T]):       # Scope of `T` is the class:
    def __init__(self, value: T):  # Providing some `T` on `__init__`
        self._value = value        # defines the class' `T`

这允许将子类声明为泛型或具体的。

class Class1(BaseClass[str]):      # "is a" BaseClass where `T = str`
    pass  # No need to repeat ``__init__``

class ClassT(BaseClass[T]):        # "is a" BaseClass where `T = T'`
    @property
    def value(self) -> T:
        return self._value

reveal_type(Class1("Hello World")._value)  # Revealed type is 'builtins.str*'
reveal_type(Class1(b"Uh Oh!")._value)      # error: Argument 1 to "Class1" has incompatible type "bytes"; expected "str"

reveal_type(ClassT(42).value)              # Revealed type is 'builtins.int*'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

__init__ 中的 Pycharm 类型提示不起作用

来自分类Dev

为什么在__init__中分配类主体中已提示类型的属性时,Mypy没有给出输入错误?

来自分类Dev

Python:类中的 __init__

来自分类Dev

如何注释数据类中的字段类型与其__init__的类型不同?

来自分类Dev

类作为python __init__中的参数

来自分类Dev

python类的属性不在__init__中

来自分类Dev

类变量中的类型提示

来自分类Dev

类A的方法中类型A的参数的类型提示

来自分类Dev

类A的方法中类型A的参数的类型提示

来自分类Dev

在类X的__new__方法中取消类型X的对象在返回未选中的对象时调用__init__,为什么?

来自分类Dev

在某些类的python中的__init__ def中获取变量

来自分类Dev

在Python 3中扩展类并使用__init__构造它

来自分类Dev

杀死在Python的__init__类中创建的子进程

来自分类Dev

Python:将参数冻结到类__init__函数中

来自分类Dev

如何在类的__init__方法中修补实例?

来自分类Dev

单个类中的多个__init__有什么作用?

来自分类Dev

Python中的类是否需要__init__构造函数?

来自分类Dev

如何将参数传递给类中的__init__

来自分类Dev

类变量不在__init__中时的行为

来自分类Dev

杀死在Python的__init__类中创建的子进程

来自分类Dev

Python中的类是否需要__init__构造函数?

来自分类Dev

从 __init__() 开始 multiprocessing.Process 类中的方法

来自分类Dev

类型错误:__init__() 在另一个类中启动类时获得了意外的关键字参数

来自分类Dev

Pygame类和__init__

来自分类Dev

Python类__init__确认

来自分类Dev

python类的__init__方法

来自分类Dev

__init__中的UnboundLocalError

来自分类Dev

如何在python中的“类”类型中添加类型提示

来自分类Dev

PhpStorm 不类型提示类方法返回 trait 中的类型

Related 相关文章

  1. 1

    __init__ 中的 Pycharm 类型提示不起作用

  2. 2

    为什么在__init__中分配类主体中已提示类型的属性时,Mypy没有给出输入错误?

  3. 3

    Python:类中的 __init__

  4. 4

    如何注释数据类中的字段类型与其__init__的类型不同?

  5. 5

    类作为python __init__中的参数

  6. 6

    python类的属性不在__init__中

  7. 7

    类变量中的类型提示

  8. 8

    类A的方法中类型A的参数的类型提示

  9. 9

    类A的方法中类型A的参数的类型提示

  10. 10

    在类X的__new__方法中取消类型X的对象在返回未选中的对象时调用__init__,为什么?

  11. 11

    在某些类的python中的__init__ def中获取变量

  12. 12

    在Python 3中扩展类并使用__init__构造它

  13. 13

    杀死在Python的__init__类中创建的子进程

  14. 14

    Python:将参数冻结到类__init__函数中

  15. 15

    如何在类的__init__方法中修补实例?

  16. 16

    单个类中的多个__init__有什么作用?

  17. 17

    Python中的类是否需要__init__构造函数?

  18. 18

    如何将参数传递给类中的__init__

  19. 19

    类变量不在__init__中时的行为

  20. 20

    杀死在Python的__init__类中创建的子进程

  21. 21

    Python中的类是否需要__init__构造函数?

  22. 22

    从 __init__() 开始 multiprocessing.Process 类中的方法

  23. 23

    类型错误:__init__() 在另一个类中启动类时获得了意外的关键字参数

  24. 24

    Pygame类和__init__

  25. 25

    Python类__init__确认

  26. 26

    python类的__init__方法

  27. 27

    __init__中的UnboundLocalError

  28. 28

    如何在python中的“类”类型中添加类型提示

  29. 29

    PhpStorm 不类型提示类方法返回 trait 中的类型

热门标签

归档