测试您的变量是否是的实例numbers.Number
:
>>> import numbers
>>> import decimal
>>> [isinstance(x, numbers.Number) for x in (0, 0.0, 0j, decimal.Decimal(0))]
[True, True, True, True]
这将使用ABC,并且将适用于所有内置的数字类,并且如果它们值得使用,则也适用于所有第三方类(已注册为Number
ABC的子类)。
但是,在许多情况下,您不必担心手动检查类型- Python是鸭子类型的,通常可以混合使用一些兼容的类型,但是当某些操作没有意义时(4 - "1"
)它会阻止错误消息,因此手动检查是很少真正需要。这只是奖金。您可以在完成模块时添加它,以避免使实施细节困扰其他人。
该功能从Python 2.6开始。在旧版本中,您几乎只能检查一些硬编码类型。