我想为任何数据编写一个通用包装类。首先,我正在尝试制作一个功能,如果它有一段时间没有使用,它将自动将数据存储在硬盘驱动器中(一种自动交换)。
我已经用 python 编程多年了,但我就是找不到一种“pythonic”的方式来做这件事。我最终求助于一个脚本,它可以为我编写所有可能的方法——但即使这样也没有奏效。看看下面。
我什至无法让这个简单的代码工作——为什么???
class adder(object):
def __init__(self, value):
self.value = value
def __add__(self, other):
print 'adding'
return self.value.__add__(other)
def __radd__(self, other):
print 'radding'
return self.value.__radd__(other)
a = adder(10)
b = adder(12)
print a + b
输出
adding
Traceback (most recent call last):
File "/home/user/Projects/CloudformDesign/PythonCloudform/cloudtb/playground/adding_classes.py", line 42, in <module>
print a + b
TypeError: unsupported operand type(s) for +: 'adder' and 'adder'
我当然知道我不能使用add和radd函数(只需使用 + 语法)。我这样做是为了看看世界上正在发生什么:这是结果
class adder2(object):
def __init__(self, value):
self.value = value
def __add__(self, other):
print 'a2'
return self.value + other
def __radd__(self, other):
print 'ra2'
return other + self.value
a = adder(adder2(10))
b = adder(adder2(12))
print a + b
输出:
adding
a2
radding
ra2
22
很明显,它是进入“adding”函数,然后进入第二类的adding函数,然后进入第一类的“radding”函数,最后进入第二类的“radding”函数——在WORLD中是什么正在发生???此外,这在另一个没有的情况下有效——我很困惑。
另外,如果您知道任何执行此操作的代码,请告诉我!