gpt4 book ai didi

(任何)类的 Python 类型提示

转载 作者:太空狗 更新时间:2023-10-29 22:28:58 26 4
gpt4 key购买 nike

我想键入提示以下函数:

def get_obj_class(self) -> CLASS_TYPE:
return self.o.__class__
  • CLASS_TYPE 应表示 classes。
  • self.o 可以是运行时确定的任何类型。

类似地,如果我有一个返回 cls 实例的函数 f(cls: CLASS_TYPE),有没有办法键入提示返回值合适吗?

最佳答案

我建议使用 TypeVar 的组合, 以表明您的 self.o 值可以是任意类型,并且 Type ,通过以下方式:

from typing import TypeVar, Type

T = TypeVar('T')

class MyObj:
def __init__(self, o: T) -> None:
self.o = o

def get_obj_class(self) -> Type[T]:
return type(self.o)

def accept_int_class(x: Type[int]) -> None:
pass

i = MyObj(3)
foo = i.get_obj_class()
accept_int_class(foo) # Passes

s = MyObj("foo")
bar = s.get_obj_class()
accept_int_class(bar) # Fails

如果您希望o 的类型更加动态,您可以显式或隐式地为其指定Any 类型。


关于你的后一个问题,你会这样做:

def f(cls: Type[T]) -> T:
return cls()

请注意,在实例化您的类时需要小心——我不记得 Pycharm 在这里做了什么,但我知道 mypy 目前不会检查以确保您正在调用您的 __init__ 功能正常/使用正确数量的参数。

(这是因为 T 可以是任何东西,但是没有办法暗示构造函数应该是什么样子,所以执行这个检查最终要么不可能,要么非常困难。)

关于(任何)类的 Python 类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44325153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com