我们如何检测Python变量是否来自__future__
?
我注意到它是一个类,特别是__future__._Feature()
。但是,导入该类的所有尝试似乎都失败了。
type()
返回<class '__future__._Feature'>
我尝试获得_Feature
课程:
>>> from __future__ import absolute_import
>>> absolute_import
_Feature((2, 5, 0, 'alpha', 1), (3, 0, 0, 'alpha', 0), 16384)
>>> type(abolute_import)
<class '__future__._Feature'>
>>> from __future__ import _Feature
SyntaxError: future feature _Feature is not defined
>>> import __future__._Feature
ImportError: No module named '__future__._Feature'; '__future__' is not a package
>>>
答案 0 :(得分:4)
这样做的方法是从已知的&#34; _Feature&#34;中提取类型。并使用:
from __future__ import division
Feature = type(division)
from __future__ import unicode_literals
isinstance(unicode_literals, Feature)
(收益为真)
这可能看起来像是&#34; hack&#34; - 但它实际上是检索本机代码中定义的几个不可用于直接导入的类的方法。可以使用FunctionType
导入更有用的from types import FunctionType
- 但是如果您打开types
模块的Python文件,您会看到它被声明为:FunctionType = type(lambda: None)
那就是说,我想知道你检查_Feature
__future__
导入类型的动机是什么 - 这些主要是占位符,因此可以使用导入语法来启用特点。更改__future__
导入的原因直接进入每个编译的代码对象,作为标志,并更改字节代码执行本身的行为。
您当然可以从模块中删除这些_Feature
对象,并且仍然会为该模块启用该功能本身 -
>>> from __future__ import division
>>> del division
>>> 5 / 2
2.5