max - python - 实现自定义max函数

我有两个Point对象,代码如下所示:


class Point:


 def __init__(self, x, y):


 self.x = x


 self.y = y



a = Point(1, 3)


b = Point(4, 2)


max(a, b) # Make this output Point(4, 3)



问题是:如何为Point类实现一个自定义的max函数Point(max(self.x, other.x), max(self.y, other.y))

时间: 原作者:

不能这样实现max(),它只能返回输入给出的元素之一,不能产生新实例。

你需要实现自己的函数:


def max_xy_point(*points):


 if not points:


 raise ValueError("Need at least 2 points to compare")


 if len(points) == 1:


 points = points[0]


 return Point(


 max(p.x for p in points),


 max(p.y for p in points)


 )



max()函数一样,它可以采用单个序列(max([p1, p2, p3, ...])或者单独的参数(max(p1, p2, p3, ...))。

原作者:

max(a, b)只能返回a或b不能用新值创建point。

可以向类中添加自己的方法并使用

 
c =a.max(b)




class Point:


 def __init__(self, x, y):


 self.x = x


 self.y = y



 def max(self, other):


 return Point(max(self.x, other.x), max(self.y, other.y))



a = Point(1, 3)


b = Point(4, 2)


c = a.max(b)


print(c.x, c.y)



原作者:

你可以像这样处理它,得到想要的输出:


class Point:



 def __init__(self, x, y):


 self.x = x


 self.y = y



 def max(self, other):


 if not isinstance(other, Point):


 return NotImplemented


 return Point(max(self.x, other.x), max(self.y, other.y)) 



 def __repr__(self):


 return f'Point{self.x, self.y}'



a = Point(1, 3)


b = Point(4, 2)


a.max(b)


# Point(4, 3)



原作者:
...