Ξέν*_*νος 1 python isinstance python-3.x gmpy
我想知道如何检查变量是否为 mpfr 类型,这可能听起来微不足道,但简单的方法isinstance(v, mpfr)无法解决问题。
示例:创建一个 mpfr 实例的变量,如何验证该变量是 mpfr 的实例?
import gmpy2
from gmpy2 import mpfr
f = mpfr('0.5')
Run Code Online (Sandbox Code Playgroud)
最直观的方法失败了:
>>> isinstance(TAU, mpfr)
TypeError: isinstance() arg 2 must be a type or tuple of types
Run Code Online (Sandbox Code Playgroud)
因为mpfr是一个函数:
>>> mpfr
<function gmpy2.mpfr>
Run Code Online (Sandbox Code Playgroud)
gmpy2只有一个名为 的属性mpfr,它就是上面的函数。
然而,函数输出的类mpfr也称为mpfr:
>>> f.__class__
mpfr
Run Code Online (Sandbox Code Playgroud)
但这mpfr不是mpfr主命名空间中的函数:
>>> type(f) == mpfr
False
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能mpfr通过创建一个空mpfr实例并使用其__class__属性来检查变量是否是 的实例:
isinstance(f, mpfr().__class__)
Run Code Online (Sandbox Code Playgroud)
怎样才能<class 'mpfr'>直接访问呢?
基于我在 python REPL 上尝试的快速实验,我发现最简单的方法是将类名 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
>>>
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想使用它,__class__因为它应该是私有数据成员,那么您可以改用type(f):
>>> str(type(f)) == "<class 'mpfr'>"
True
Run Code Online (Sandbox Code Playgroud)
或者如果您不关心创建 mpfr 的新实例但更喜欢语法糖,则另一种选择:
>>> type(f) == type(mpfr())
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |