为自定义数据类型实现sum()

量子克里斯

据我了解,要使其能够投射sum()到对象上,它必须是可迭代的,并且必须是“可添加的”,即它必须实现方法__iter____add__但是,当我在课堂上这样做Point(仅作为示例)时,这是行不通的。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)

    def __iter__(self):
        return self

    def __str__(self):
        return str((self.x, self.y))


print(Point(2, 2) + Point(1, 1))
>>> (3, 3)    # As expected; good!

points = [Point(0, 0), Point(2, 0), Point(0, 2), Point(2, 2)]
print(sum(points))    # Expect (4, 4)
>>> TypeError: unsupported operand type(s) for +: 'int' and 'Point'

如果我实现__radd__的方法与__add__相同,则在尝试时出现属性错误sum()

AttributeError: 'int' object has no attribute 'x'

基于错误,我Points在某处被分开,ints但是我不确定在哪里。谢谢你的帮助。

他们只有

发生这种情况的原因sum是,从默认值开始,int并且在执行sum(points)实际sum操作时首先尝试添加0 + Point(0, 0),因此出现错误。如果您查看上的帮助sum,这将非常明显,

模块内置函数中内置函数求和的帮助:

sum(iterable,start = 0,/)返回“开始”值(默认值:0)加上一个可迭代数字的和

When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.

更改为

>>> print(sum(points))

>>> print(sum(points, Point(0, 0)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

测试未实现Eq的自定义数据类型

来自分类Dev

自定义数据类型的繁琐Ord实现

来自分类Dev

定义自定义数据类型

来自分类Dev

自定义数据类型压缩

来自分类Dev

自定义数据类型是否可能实现可变大小效率的可行选择?

来自分类Dev

如何在Haskell中实现数据类型的自定义排序?

来自分类Dev

使用csv-conduit将CSV文件解析为自定义数据类型

来自分类Dev

pg_dump自定义数据类型

来自分类Dev

在Java中返回自定义数据类型(类?)

来自分类Dev

使用哪个:自定义数据类型或TwoDArrayWritable

来自分类Dev

使用EclipseLink和Querydsl的自定义数据类型

来自分类Dev

如何使CStr()处理盒装自定义数据类型?

来自分类Dev

VBA自定义数据类型-默认

来自分类Dev

快速检查自定义数据类型

来自分类Dev

Haskell自定义数据类型和表示

来自分类Dev

访问自定义Haskell数据类型的函数

来自分类Dev

Haskell访问自定义数据类型中的字段

来自分类Dev

具有自定义数据类型的Haskell加法

来自分类Dev

Google Fit自定义数据类型

来自分类Dev

自定义数据类型渲染器部署

来自分类Dev

串联自定义列表包装器数据类型

来自分类Dev

关于自定义数据类型的SIMD指令

来自分类Dev

具有自定义数据类型的Haskell加法

来自分类Dev

模式匹配自定义数据类型

来自分类Dev

包含MultiUrlPicker的Umbraco的自定义数据类型

来自分类Dev

使用自定义数据类型过滤列表

来自分类Dev

推力向量与自定义数据类型

来自分类Dev

响应200(自定义数据类型)的AJAX错误

来自分类Dev

无法读取自定义数据类型