【发布时间】:2018-08-07 16:28:13
【问题描述】:
我希望能够提供一个具有类型元组的函数,然后将其用于反序列化从事务返回的数据。如果事务成功,该函数将返回这些类型的实例。 例如:
T = TypeVar('T')
class Base:
@classmethod
def deserialize(cls: Type[T], bts: bytes) -> T:
return cls(**json.loads(bts))
@classmethod
def transaction(cls, *types):
items = self.db.transact([t.generate_load_operation() for t in types])
items = [t.deserialize(item) for item in items]
# how do I type-hint transaction, so that it would imply that
# it will always return a tuple (or a list) of instances of classes
# contained in variable types?
return items
class A(Base):
pass
class B(Base):
pass
a_inst, b_inst = Base.transaction(A, B)
我应该如何注释事务,以便类型检查器可以正确推断从它返回的值的类型?
【问题讨论】:
-
PEP 484:非目标 虽然建议的类型模块将包含一些用于运行时类型检查的构建块——特别是 get_type_hints() 函数——但必须开发第三方包来实现特定的运行时类型检查功能,例如使用装饰器或元类。使用类型提示进行性能优化留给读者作为练习。
-
@BoarGules 我不相信你明白我在说什么。我正在寻找基于提供给函数的常量值的静态推断。请注意,我在示例中给出了这个 - 一个足够先进的静态检查器必须能够理解提供给函数的值是一个常量,因此可以在不实际运行代码的情况下对其进行检查。
-
@AndreyCizov 你找到答案了吗,我也在找类似的东西。
-
目前没有办法做到这一点@moshevi
-
由于您现在拒绝了两个似乎满足问题的答案,并引用了问题中陈述的要求not,请更新问题以澄清您在寻找什么。如果您想要“mypy 的插件,而不是默认 python 设置中所述功能的可行性”,那么问题应该明确说明。