python帶示例?python中 in 操作用來判斷一個對象是否在另一個對象内,比如 1 in [1,2,3] 結果是True那如果是我們自己創建的對象,怎麼支持 in 操作呢,比如判斷一個點是否在一個方形内?,接下來我們就來聊聊關于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
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!