【发布时间】:2020-10-14 21:05:55
【问题描述】:
Type[SomeType] 是否有反函数,所以Instance[Type[SomeType]] == SomeType?
给了我一个类,我想注释调用它的构造函数的返回值
class FixedSizeUInt(int):
size: int = 0
def __new__(cls, value: int):
cls_max: int = cls.max_value()
if not 0 <= value <= cls_max:
raise ValueError(f"{value} is outside range " +
f"[0, {cls_max}]")
new: Callable[[cls, int], Instance[cls]] = super().__new__ ### HERE
return new(cls, value)
@classmethod
def max_value(cls) -> int:
return 2**(cls.size) - 1
编辑: 这个类是抽象的,它需要被子类化才能有意义,因为大小为 0 只允许 0 作为它的值。
class NodeID(FixedSizeUInt):
size: int = 40
class NetworkID(FixedSizeUInt):
size: int = 64
编辑 2:对于这种特定情况,使用泛型就足够了,如 https://stackoverflow.com/a/39205612/5538719 中所述。尽管如此,Type 的逆问题仍然存在。那么问题可能是:泛型是否会涵盖所有情况,从而永远不需要逆函数?
【问题讨论】:
-
你能澄清一下你想在这里注释什么吗?
__new__的返回值就是FixedSizeUInt。是否要参数化cls的类型,使其适用于所有子类? -
@MisterMiyagi 是的,没错。我需要它是通用的,因此它适用于子类,因为您可以看到 size 变量设置为零,因此如果不进行子类化并将其更改为零以外的值,则使用此类是没有意义的
-
你能解释一下你所说的编辑是什么意思吗?如果您的问题与其他问题有足够的不同,您的问题将被重新打开。
T字面意思是“T类型的实例”,所以给定cls: Type[T]一个T也是“一个Instance[Type[T]]”(如果这样的东西被定义)。 -
这足以涵盖所有不需要
Instance[Type[T]]的情况吗?
标签: python python-3.x type-hinting python-typing