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