我想为尊重from __future__ import division
声明的数字制作一个特殊的容器。如果我from __future__ import division
在容器定义中设置,那么一切都被迫使用truediv。相反,如果我以另一种方式做,那么一切都会使用整数除法。有什么方法可以检查正在进行哪种划分?(在 Python 3 中,这是一个有争议的问题,仅适用于 2.x)
例如,这里是file1.py
:
class MySpecialContainer(object):
def __init__(self, value):
self.value = value
def div(self, other):
new_value = self.value / other
return self.__class__(new_value)
def truediv(self, other):
new_value = self.value * 1.0 / other
return self.__class__(new_value)
__div__ = div
__truediv__ = truediv
然后在file2.py
:
from __future__ import division
from file1 import MySpecialContainer
obj = MySpecialContainer(5)
print obj.value # 5
print obj.div(2).value # 2
print 5 / 2 # 2.5
而显式使用除法运算符会导致__truediv__
使用
print MySpecialContainer(5) / 2 # 2.5
有什么特殊的方法可以检测到这个问题并避免这个问题,还是我需要对我的容器做出明确的选择?
编辑:这显然是一个非常简单的例子,但我希望以更复杂的方式做到这一点(即,改变 pandas 以添加一个 truediv 方法并将 div 更改为对环境敏感)。特别是,我想在导入时动态执行此操作,根据导入文件进行更改(我猜这会引发关于首先导入哪个文件等的一系列问题......)