我刚刚写了一些看起来不太合我的口味的代码,我认为还有更 Pythonic 的惯例。
我有一个类,我想将其与另一个对应的 __mul__ 方法一起进行显式求乘法。我明显应该在其中一个中进行计算,让另一个呼叫。
我的理解是, __mul__ 形式应该返回 NotImplemented,而 mul 根据类型对象中乘法没有定义时应触发 TypeError 或 NotImplementedError(我不确定哪一个)。所以目前,我有
def mul(self, other: object) -> "CrtElement":
if isinstance(other, CrtElement):
...
elif isinstance(other, int):
...
... # 对其他类型操作
else:
raise TypeError
def __mul__(self, other: object) -> "CrtElement":
try:
return self.mul(other)
except TypeError:
return NotImplemented
所以,最终问题是:
1.我是正确的吗?我认为 __mul__ 在这种情况下应该返回 NotImplemented,同时 mul 应该引发错误?(我相信答案是 “是” 的,但我想确认我的假设)
2 是否应该在 mul 中引发 TypeError 或 NotImplementedError?
3 我应该对其他方向的包装进行操作吗?也就是说,我是否应该把 mul调用__mul__,而不是我当前的__mul__调用多??
4 我们是否有更简单,更 Pythonic 规定的更好的方法?
评论 (0)