有没有办法将类用作 python 内置数值类型的类型提示?

Is there a way to use classes as type hints for python's built-in numeric types?

提问人:Anonymous 提问时间:11/10/2023 最后编辑:Anonymous 更新时间:11/10/2023 访问量:64

问:

我想创建一个类,该类可以用作任何 python 内置数值类型的类型提示,例如 int、float、complex 或继承自 number 的类。数

我想要这样的东西:

from fractions import Fraction


class AnyNumber(<whatever here>):
    ...


def foo(number: AnyNumber):
    ...


foo(1)  # Valid
foo(1.0)  # Valid
foo(1j)  # Valid
foo(Fraction())  # Also valid

我该怎么做?

我也尝试过使用数字。Number 作为类型提示,但我的 Pylance 和 mypy 说“int 与 Number 不兼容”。

有没有其他方法可以在不使用的情况下做到这一点?Union

python-3.x 数字 类型提示

评论

0赞 Abdul Aziz Barkat 11/10/2023
相关问题:github.com/python/mypy/issues/3186 似乎您只需要创建自己的来描述您的期望。Protocol
0赞 blueteeth 11/13/2023
你希望这个类具有数字的哪些特征?也就是说,你打算用这个数字做什么?

答:

0赞 blhsing 11/21/2023 #1

由于所有可能的数字都是复数,因此您可以改用该协议来键入提示任何数字:typing.SupportsComplex

from typing import SupportsComplex
from fractions import Fraction

def foo(number: SupportsComplex):
    pass

foo(1)  # Valid
foo(1.0)  # Valid
foo(1j)  # Valid
foo(Fraction())  # Also valid

演示:https://mypy-play.net/?mypy=latest&python=3.11&gist=e327d5b393677e8b97b125d3184d74a6