该typing
模块为通用类型提示提供了一个基类:typing.Generic
该类。
Generic
方括号中的接受类型参数的子类,例如:
list_of_ints = typing.List[int]
str_to_bool_dict = typing.Dict[str, bool]
我的问题是,如何访问这些类型参数?
也就是说,str_to_bool_dict
作为输入,我如何获得str
和bool
输出?
基本上我正在寻找这样的功能
>>> magic_function(str_to_bool_dict)
(<class 'str'>, <class 'bool'>)
从Python3.8开始,有typing.get_args
:
print( get_args( List[int] ) ) # (<class 'int'>,)
PEP-560还提供了__orig_bases__[n]
,它允许我们使用第
n 个通用基的参数:
from typing import TypeVar, Generic, get_args
T = TypeVar( "T" )
class Base( Generic[T] ):
pass
class Derived( Base[int] ):
pass
print( get_args( Derived.__orig_bases__[0] ) ) # (<class 'int'>,)
可能性1
从Python 3.6开始。有一个公共__args__
和(__parameters__
)字段。例如:
print( typing.List[int].__args__ )
这包含通用参数(即int
),而__parameters__
包含通用本身(即~T
)。
可能性2
使用Typeing_inspect.getargs
使用哪个
typing
遵循PEP8。PEP8和typing
由Guido
van Rossum合着。前后双下划线定义为: “位于 用户控制的名称空间中的 “魔术”对象或属性”。
这些声音也被在线注释;从官方存储库中键入,我们可以看到:*
“__args__
是下标中使用的所有参数的元组,例如Dict[T, int].__args__ == (T, int)
”。
但是,作者还指出:*
“类型输入模块具有临时状态,因此它没有被高标准的向后兼容性所覆盖(尽管我们尝试保持尽可能多的状态),这对于(尚未记录)尤其如此。
dunder属性,例如__union_params__
。如果您想在运行时上下文中使用键入类型,那么您可能会对typing_inspect
项目感兴趣(其中一部分可能会在以后进行键入)。”
我一般说来,无论您做什么,typing
都需要暂时保持最新。如果需要向前兼容的更改,建议您编写自己的注释类。
我正在研究的模型设置如下。它包含四种代理类型: 患者 小型医院 中级医院 大医院 . 所有这些代理都位于Main。SmallHospital和MediumHospital代理通过指向代理对象的链接在网络中连接到大医院,例如:和。 然而,我想在一段时间后将患者代理人转移到第二家医院。如果患者目前在小型医院,则应转移到小型医院链接到的mediumHospital,同样,如果患者在mediumHospi
我使用包来做并行非负矩阵分解,即X=WH。我使用类中的方法。如下面描述中所提到的,所得矩阵存储在中。 在包的GitHub页面中,类是 你能解释一下如何从这个类中提取信息吗? 为了方便起见,我还把笔记本放在这里的Colab上。
问题内容: 当涉及到没有泛型的类时,我可以这样访问.class属性: 但是,如果Foo具有泛型,我如何访问此“ .class”属性?像这样: 我试图返回,但这无法正常工作:。 我如何进入的课程? 问题答案: 您可以随时这样做: 您将拥有未经检查的强制转换警告,因为它确实是不安全的-正如其他人提到的那样,返回的类对象不再像“的类”那样是“ 的类”。
问题内容: 我有一个应用程序,它基本上是服务的代理。该应用程序本身是在Jersey上构建的,由Jetty提供。我有这个资源方法: 用户提交POST表单。所有POST请求都通过此方法。除了一个细节外,UriInfo和HttpServletRequest被适当地注入:似乎没有参数。这是我从终端发送的请求: 此处的POST正文显然包含两个参数:foo和biz。但是,当我尝试在代码()中获取它们时,结果是
我有一个应用程序,基本上是一个服务的代理。该应用程序本身是基于Jersey构建的,由Jetty提供服务。我有这个资源方法: 用户提交POST表单。所有POST请求都通过此方法。UriInfo和HttpServletRequest被适当地注入,除了一个细节:似乎没有参数。这是我从终端发送的请求: 这里,POST正文显然包含两个参数:foo和biz。但当我尝试在代码中获取它们时(),结果是一个大小为0
问题内容: 您如何访问“工作流程” Jenkins作业的“此构建已参数化”部分中的设置? 测试用例 创建一个工作流作业。 启用“此构建已参数化”。 添加具有默认值的STRING PARAMETER 。 将以下代码添加到: 运行工作。 结果 问题答案: 我认为使用Workflow插件时,变量可以直接使用,而不是通过env。尝试: