说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
object.__contains__(self, item)
方法是 Python 中的一个特殊方法,用于定义对象的包含行为。当你使用 in 运算符检查一个对象是否包含某个元素时,Python 会自动调用该方法来判断。
成员检测运算符 (in 和 not in) 通常以对容器进行逐个迭代的方式来实现。 不过,容器对象可以提供这个特殊方法并采用更有效率的实现,这样也不要求对象必须为可迭代对象。对于未定义 __contains__()
的对象,成员检测将首先尝试通过 __iter__()
进行迭代,然后再使用 __getitem__()
的旧式序列迭代协议,参看Python官方文档中语言参考中的相应部分。
这个方法接收一个参数 item,表示要检查的元素。如果对象包含了该元素,则返回 True,否则返回 False。
以下是一个简单的示例说明如何在自定义类中使用 __contains__()
方法:
class MyList:
def __init__(self, data):
self.data = data
def __contains__(self, item):
return item in self.data
# 使用示例
my_list = MyList([1, 2, 3, 4, 5])
# 使用 in 运算符检查元素是否存在
print(3 in my_list) # 输出 True
print(6 in my_list) # 输出 False
在上面的示例中,MyList 类实现了 __contains__()
方法,使得该类的实例可以使用 in 运算符来检查某个元素是否存在于列表中。当我们使用 in 运算符检查元素是否存在时,Python 会调用对象的 __contains__()
方法来执行检查。
创建一个类,代表一个包含学生信息的班级,允许用户通过学生的姓名来快速检查学生是否在班级中。
下面是一个示例:
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
class Class:
def __init__(self):
self.students = []
def add_student(self, student):
self.students.append(student)
def __contains__(self, name):
return any(student.name == name
for student
in self.students)
# 使用示例
classroom = Class()
classroom.add_student(Student("Alice", 20))
classroom.add_student(Student("Bob", 22))
classroom.add_student(Student("Charlie", 21))
# 使用 in 运算符检查学生是否在班级中
print("Alice" in classroom) # 输出 True
print("David" in classroom) # 输出 False
在上面的示例中,Student 类表示一个学生,每个学生有姓名和年龄属性。Class 类表示一个班级,允许用户通过学生的姓名来快速检查学生是否在班级中。我们实现了 __contains__()
方法,该方法遍历班级中的每个学生,检查学生的姓名是否与给定的姓名相匹配。如果找到了匹配的学生,则返回 True,表示学生在班级中,否则返回 False。这样,用户就可以使用 in 运算符来快速检查学生是否在班级中。
https://docs.python.org/zh-cn/3/reference/datamodel.html#object.__contains__
更新时间:April 1, 2024, 5:18 p.m. 标签:python 特殊方法 成员检测