相关疑难解决方法(0)

Python Typing:根据函数参数声明返回值类型

假设我有将类型作为参数并返回该类型实例的函数:

def fun(t):
    return t(42)
Run Code Online (Sandbox Code Playgroud)

然后我可以调用它并获取所提供类型的对象:

fun(int)           # 42
fun(float)         # 42.0
fun(complex)       # (42+0j)
fun(str)           # "42"
fun(MyCustomType)  # something
Run Code Online (Sandbox Code Playgroud)

该列表并不详尽,我希望能够使用具有适当构造函数的任何类型。

然后,我想为该函数添加类型提示。该函数的返回值的类型提示应该是什么?


我试过使用 simplet,因为t是一种类型:

def fun(t: type) -> t:
    return t(42)
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

main.py:1: 错误:未定义名称“t”


这个答案建议使用TypeVar

from typing import TypeVar

T = TypeVar("T")

def fun(t: T) -> T:
    return t(42)
Run Code Online (Sandbox Code Playgroud)

但这似乎不正确, asT表示一种类型,因此它表明返回的是类型本身,而不是其实例。Mypy 拒绝它:

main.py:6: 错误:“对象”不可调用


使用Any明显的工作,但我觉得它太模糊了,它没有传达意图:

from typing import Any

def fun(t: type) -> Any:
    return t(42)
Run Code Online (Sandbox Code Playgroud)

python type-hinting python-3.x

10
推荐指数
2
解决办法
6077
查看次数

(任何)类的Python类型提示

我想输入提示以下函数:

def get_obj_class(self) -> *class*:
  return self.o.__class__
Run Code Online (Sandbox Code Playgroud)

self.o 可以是任何类型,它是在运行时确定的.

*class*显然不是这里的答案,因为它是无效的语法.但是,什么正确的答案?我找不到任何关于此的文档,任何帮助表示赞赏.


在类似的说明中,如果我有一个f(cls: *class*)返回实例的函数cls,有没有办法键入提示返回值?

python types type-hinting python-3.x

7
推荐指数
2
解决办法
2922
查看次数

标签 统计

python ×2

python-3.x ×2

type-hinting ×2

types ×1