python中 in 操作用来判断一个对象是否在另一个对象内,比如 1 in [1,2,3] 结果是True那如果是我们自己创建的对象,怎么支持 in 操作呢,比如判断一个点是否在一个方形内?,接下来我们就来聊聊关于python带示例?以下内容大家不妨参考一二希望能帮到您!

python带示例(python实现自定义34)

python带示例

python中 in 操作用来判断一个对象是否在另一个对象内,比如 1 in [1,2,3] 结果是True。那如果是我们自己创建的对象,怎么支持 in 操作呢,比如判断一个点是否在一个方形内?

这种情况就需要我们自己定义 in 操作符了,其实也简单,只需要定义一个__contains__就可以了。

比如我们有以下两个类,一个代表坐标点,一个代表方形:

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

如果我们直接执行以下语句就会报错,因为python默认的 in 操作不适用于这两个对象:

p1 = Point(2, 2) p2 = Point(4, 2) r = Rectangle(0, 0, 3, 3) print(p1, "in", r, ":", p1 in r) print(p2, "in", r, ":", p2 in r)

那让我们定义一个__contains__方法来实现 in 操作,如下代码:

class Point: def __init__(self, x, y): self.x = x self.y = y def __str__(self): return f"Point({self.x}, {self.y})" class Rectangle: def __init__(self, x, y, width, height): self.x = x self.y = y self.width = width self.height = height def __contains__(self, point): if type(point) != Point: raise Exception(f"Unsupport 'in' operator for operand '{type(point)}'") if self.x <= point.x <= self.x self.width and self.y <= point.y <= self.y self.height: return True else: return False def __str__(self): return f"Rectangle({self.x}, {self.y}, {self.width}, {self.height})" p1 = Point(2, 2) p2 = Point(4, 2) r = Rectangle(0, 0, 3, 3) print(p1, "in", r, ":", p1 in r) print(p2, "in", r, ":", p2 in r)

运行代码输出如下:

Point(2, 2) in Rectangle(0, 0, 3, 3) : True Point(4, 2) in Rectangle(0, 0, 3, 3) : False

,