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)



原作者:
...