小编moc*_*uin的帖子

是否有一种机制可以为运算符定义 null 元素(0 表示加法,1 表示乘法等)

这确实是 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)

python sum class

5
推荐指数
0
解决办法
133
查看次数

标签 统计

class ×1

python ×1

sum ×1