这确实是 Python 中的一个常见问题,由以下代码引起:
class Toto():
def __init__(self, val, n=""):
self.val = val
self.n = n
def __repr__(self): return f"Toto({self.val}, {self.n})"
def __add__(self, other):
# Toto-casting
if not isinstance(other, Toto):
other = Toto(other, n="")
return Toto(self.val+other.val, self.n+other.n)
__radd__ = __add__
t = Toto(1, "1")
v = Toto(2, "11")
print(t+v)
print(sum([t, v]))
Run Code Online (Sandbox Code Playgroud)
按预期打印:
Toto(3, 111)
Toto(3, 111)
Run Code Online (Sandbox Code Playgroud)
现在,由于某些原因,我想删除Toto-casting中的 2 行,以确保在尝试添加 2 个不是实例的对象时__add__引发- 但我也希望它有效。为此,唯一的解决方法是将初始值明确指定为AttributeErrorTotosum([t, v])
Toto(3, 111)
Toto(3, 111)
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否可以在类中指定“用于添加的空元素”,默认情况下将其称为 sum 的初始值?或者在代码中,这是可以接受的(例如在遥远的Python版本中):
sum([t, v], Toto(0, "")) …Run Code Online (Sandbox Code Playgroud)