使用Python的__contains__()函数定义对象的包含操作

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__()函数,我们可以实现自定义的包含操作,从而达到灵活且符合实际需求的包含判断操作。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签