如何检查变量是否是 Python 3 中 mpfr 的实例?
How to check if a variable is an instance of mpfr in Python 3?
我想知道如何检查一个变量是否属于 mpfr 类型,这听起来可能微不足道,但一个简单的 isinstance(v, mpfr)
无法解决问题。
示例:创建一个变量是mpfr的实例,如何验证该变量是mpfr的实例?
import gmpy2
from gmpy2 import mpfr
f = mpfr('0.5')
最直观的方法失败了:
>>> isinstance(TAU, mpfr)
TypeError: isinstance() arg 2 must be a type or tuple of types
因为mpfr
是一个函数:
>>> mpfr
<function gmpy2.mpfr>
gmpy2
只有一个属性mpfr
,就是上面的函数
然而mpfr
函数输出的class也被称为mpfr
:
>>> f.__class__
mpfr
但是这个 mpfr
不是主命名空间中的 mpfr
函数:
>>> type(f) == mpfr
False
到目前为止,我只能通过创建一个空的 mpfr
实例并使用其 __class__
属性来检查变量是否是 mpfr
的实例:
isinstance(f, mpfr().__class__)
如何直接访问 <class 'mpfr'>
?
根据我在 python REPL 上尝试的快速实验,我发现最简单的方法是将 class 名称 mpfr 转换为字符串,并将其与字符串比较进行比较:
$ python3
Python 3.9.7 (default, Aug 31 2021, 13:28:12)
[GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gmpy2 import mpfr
>>> f = mpfr('0.5')
>>> f.__class__
<class 'mpfr'>
>>> str(f.__class__)
"<class 'mpfr'>"
>>> str(f.__class__) == "<class 'mpfr'>"
True
>>>
或者,如果您不想使用 __class__
因为它应该是私有数据成员,那么您可以使用 type(f)
代替:
>>> str(type(f)) == "<class 'mpfr'>"
True
或者如果您不关心创建 mpfr 的新实例但更喜欢语法糖的话,还有另一种选择:
>>> type(f) == type(mpfr())
True
我认为因为 mpfr
是一个函数,所以 isinstance()
无法检查,这可能会起作用:
isinstance(f, type(mpfr()))
@PYC 的回答是正确的,将适用于当前版本和下一个主要版本。
这已在下一版本的 gmpy2 中修复。 2.1.0rc1 的轮子目前可用。 rc2即将发布,修复部分平台兼容性问题
可以用命令安装
pip 安装 gmpy2==2.1.0rc1
或适用于您的系统的等效 pip 命令。
我想知道如何检查一个变量是否属于 mpfr 类型,这听起来可能微不足道,但一个简单的 isinstance(v, mpfr)
无法解决问题。
示例:创建一个变量是mpfr的实例,如何验证该变量是mpfr的实例?
import gmpy2
from gmpy2 import mpfr
f = mpfr('0.5')
最直观的方法失败了:
>>> isinstance(TAU, mpfr)
TypeError: isinstance() arg 2 must be a type or tuple of types
因为mpfr
是一个函数:
>>> mpfr
<function gmpy2.mpfr>
gmpy2
只有一个属性mpfr
,就是上面的函数
然而mpfr
函数输出的class也被称为mpfr
:
>>> f.__class__
mpfr
但是这个 mpfr
不是主命名空间中的 mpfr
函数:
>>> type(f) == mpfr
False
到目前为止,我只能通过创建一个空的 mpfr
实例并使用其 __class__
属性来检查变量是否是 mpfr
的实例:
isinstance(f, mpfr().__class__)
如何直接访问 <class 'mpfr'>
?
根据我在 python REPL 上尝试的快速实验,我发现最简单的方法是将 class 名称 mpfr 转换为字符串,并将其与字符串比较进行比较:
$ python3
Python 3.9.7 (default, Aug 31 2021, 13:28:12)
[GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gmpy2 import mpfr
>>> f = mpfr('0.5')
>>> f.__class__
<class 'mpfr'>
>>> str(f.__class__)
"<class 'mpfr'>"
>>> str(f.__class__) == "<class 'mpfr'>"
True
>>>
或者,如果您不想使用 __class__
因为它应该是私有数据成员,那么您可以使用 type(f)
代替:
>>> str(type(f)) == "<class 'mpfr'>"
True
或者如果您不关心创建 mpfr 的新实例但更喜欢语法糖的话,还有另一种选择:
>>> type(f) == type(mpfr())
True
我认为因为 mpfr
是一个函数,所以 isinstance()
无法检查,这可能会起作用:
isinstance(f, type(mpfr()))
@PYC 的回答是正确的,将适用于当前版本和下一个主要版本。
这已在下一版本的 gmpy2 中修复。 2.1.0rc1 的轮子目前可用。 rc2即将发布,修复部分平台兼容性问题
可以用命令安装
pip 安装 gmpy2==2.1.0rc1
或适用于您的系统的等效 pip 命令。