我发现自己处于这样一种情况:我在Python3(__add__
,__sub__
等中重新定义了我所谓的“神奇”属性或函数。)
对于所有这些,我实现了相同的两行代码:
arg1 = self.decimal if isinstance(self, Roman) else self
arg2 = other.decimal if isinstance(other, Roman) else other
这些行的细节并不重要,但是,我的代码中的冗余会分散注意力。还有另一个“神奇”功能,它在这个和它在REPL中调用之间的中间地带吗?
例如:
>> Class(9) + Class(3)
... (somewhere in python module)
... def __magicFunction__(self, rhs):
... arg1 = self.decimal if isinstance(self, Roman) else self
... arg2 = other.decimal if isinstance(other, Roman) else other
...
... THEN
...
... def __add__(self, rhs):
... return arg1 + arg2
...
12
使用类似这样的堆栈跟踪:
Traceback (most recent call last):
File "< stdin>", line 1, in < module>
File "/home/module.py", line 105, in ```__magicFunction__```
File "/home/module.py", line 110, in ```__gt__```
我希望这是有道理的......
答案 0 :(得分:1)
我不知道另一个神奇的功能,但是将你所使用的类的arg1和arg2永久变量设置为同样有效。然后为你调用的类创建一个方法来自其他所有魔法功能。
编辑:
实际上,为什么你不使用getattr?所以每个魔术函数看起来都像这样:
def __add__(self, rhs):
return getattr(self, 'decimal', self) + getattr(other, 'decimal', other)