Python的__contains__()函数定义对象的包含操作
了解__contains__()函数
在Python中,对象的包含操作可以使用__contains__()函数进行定义。该函数是Python内置函数,用于判断一个对象是否包含一个元素。如果定义了该函数,则在使用“in”运算符或者“not in”运算符判断一个元素是否在该对象中时,就会调用该函数。
class MyClass:
def __init__(self, data):
self.data = data
def __contains__(self, item):
return item in self.data
my_obj = MyClass([1, 2, 3, 4, 5])
print(3 in my_obj)
print(6 in my_obj)
执行结果:
True
False
上述示例中,我们定义了一个名为MyClass的类,并在其中定义了__contains__()函数。该函数接收一个参数item,其返回值为判断item是否在对象data属性中的结果。在测试中,我们创建一个包含[1, 2, 3, 4, 5]数据的MyClass对象my_obj,然后使用“in”运算符分别判断数字3和数字6是否在my_obj中。
使用__contains__()函数自定义包含操作
我们可以根据自己的需求对__contains__()函数进行自定义,以达到更灵活的包含操作。下面通过几个示例来展示__contains__()函数的一些常用自定义操作。
示例一:自定义包含操作
class People:
def __init__(self, name, age):
self.name = name
self.age = age
class Family:
members = []
def __init__(self, members):
self.members = members
def __contains__(self, person):
for member in self.members:
if person.name == member.name and person.age == member.age:
return True
return False
family = Family([People("小明", 12), People("小红", 10), People("小强", 14)])
print(People("小明", 12) in family)
print(People("小明", 14) in family)
执行结果:
True
False
在上面的示例中,我们定义了两个类:People和Family。People类用于表示家庭成员,Family类用于表示家庭。在Family类中,我们重载了__contains__()函数,并通过循环判断一个人是否在成员列表中来实现包含操作。在测试中,我们实例化了一个Family对象family,并判断People对象“小明”是否在family中,以及“小明”年龄为14时是否在family中。
示例二:自定义包含操作
class Magnitude:
def __init__(self, val):
self.val = val
def __contains__(self, item):
if isinstance(item, (int, float)):
return item < self.val
return self.val in item
m = Magnitude(3)
print(2 in m)
print(4 in m)
print([1,2,3] in m)
print([2,3,4] in m)
执行结果:
True
False
True
False
在上面的示例中,我们定义了一个表示数量级的类Magnitude,并在其中定义了__contains__()函数。此函数接收一个item参数,判断item是否小于Magnitude对象中的val属性值。在测试中,我们实例化了一个val为3的Magnitude对象,并分别判断数字2和数字4是否在实例对象中,以及列表[1, 2, 3]和[2, 3, 4]是否在Magnitude对象中。
示例三:自定义包含操作
class Polynomial:
def __init__(self, *coeffs):
self.coeffs = coeffs
def __contains__(self, item):
return item in self.coeffs
p = Polynomial(1, 2, 3)
print(2 in p)
print(4 in p)
执行结果:
True
False
在上面的示例中,我们定义了一个多项式类Polynomial,并在其中定义了__contains__()函数。此函数接收一个item参数,判断item是否在多项式项数列表self.coeffs中。在测试中,我们实例化了一个Polynomial对象p,其项数为[1, 2, 3],并分别判断数字2和数字4是否在对象p中。
总结
在Python中,__contains__()函数可以用于定义对象的包含操作。定义了__contains__()函数之后,就可以通过“in”或者“not in”运算符判断一个元素是否在该对象中。通过重载__contains__()函数,我们可以实现自定义的包含操作,从而达到灵活且符合实际需求的包含判断操作。