__contains__
def __contains__(self, item): # 判断逻辑
其中,self代表对象本身,item代表需要判断的元素。__contains__函数需要返回一个布尔值,当对象包含元素item时,返回True,否则返回False。
self
item
True
False
我们可以自定义一个类,并定义__contains__方法来实现对成员运算符in的自定义行为。下面的示例代码演示了如何实现一个简单的自定义类,并在其中定义__contains__方法:
in
class MyClass: def __init__(self, data): self.data = data def __contains__(self, item): return item in self.data def __str__(self): return str(self.data) my_obj = MyClass([1, 2, 3, 4, 5]) print(3 in my_obj) # True print(6 in my_obj) # False
在上面的示例中,我们定义了一个名为MyClass的类,该类接受一个列表作为构造函数的参数,并在类中定义了__contains__方法。
MyClass
在__contains__方法中,我们使用了in运算符来判断item是否包含在self.data中,返回对应的布尔值。在示例代码中,我们首先创建了一个MyClass对象my_obj,并使用in运算符判断3和6是否包含在my_obj中,最后打印结果。
self.data
my_obj
代码运行结果如下:
True False
通过自定义类的__contains__方法,我们实现了对成员运算符in的自定义判断逻辑,可以根据实际需求来判断是否包含特定的元素。
下面通过一个实际应用示例来进一步理解__contains__的用法。
假设我们正在开发一个简单的图书管理系统,我们可以自定义一个Library类来表示图书馆。每个图书馆包含多本图书,并提供了一些操作,例如添加图书、删除图书、判断图书是否可用等。
Library
首先,我们可以定义一个Book类来表示图书,其中包含图书的相关信息(例如书名和作者):
Book
class Book: def __init__(self, title, author): self.title = title self.author = author def is_available(self): # 判断图书是否可用 pass def __str__(self): return f"Book(title='{self.title}', author='{self.author}')"
上述代码定义了一个Book类,其中包括__init__方法来初始化图书的标题和作者,is_available方法用于判断图书是否可用,以及__str__方法用于返回图书的字符串表示。
__init__
is_available
__str__
接下来,我们可以定义Library类来表示图书馆,并使用__contains__方法自定义判断图书是否存在于图书馆中的逻辑:
class Library: def __init__(self): self.books = [] def add_book(self, book): # 添加图书 self.books.append(book) def remove_book(self, book): # 删除图书 self.books.remove(book) def __contains__(self, item): for book in self.books: if book.title == item.title and book.author == item.author: return True return False def __str__(self): return f"Library(books={self.books})" book1 = Book("Harry Potter", "J.K. Rowling") book2 = Book("The Lord of the Rings", "J.R.R. Tolkien") library = Library() library.add_book(book1) library.add_book(book2) print(book1 in library) # True print(book2 in library) # True print(Book("Python Programming", "Guido van Rossum") in library) # False
在上述示例中,我们定义了一个Library类,包含add_book和remove_book方法,用于添加和删除图书,以及__str__方法来返回图书馆的字符串表示。
add_book
remove_book
在__contains__方法中,我们使用了for循环遍历图书馆中的每本书,并通过比较标题和作者判断是否存在指定的图书。如果找到了匹配的图书,则返回True,否则返回False。
for
最后,我们创建了一个Library对象library并向图书馆中添加了两本书book1和book2。然后,我们使用in运算符判断特定的图书是否存在于图书馆中,并打印结果。
library
book1
book2
True True False
通过自定义Library类的__contains__方法,我们可以方便地判断一个图书是否存在于图书馆中。
本文介绍了Python魔法函数__contains__的用法,它可以实现对成员运算符in的自定义行为。通过自定义类的__contains__方法,我们可以根据实际需求来判断对象是否包含特定的元素。同时,我们通过一个实际应用示例演示了__contains__的实际应用,展示了其更加灵活和自由的特性。
Python 教程
Tkinter 教程
Pandas 教程
NumPy 教程
Flask 教程
Django 教程
PySpark 教程
wxPython 教程
SymPy 教程
Seaborn 教程
SciPy 教程
RxPY 教程
Pycharm 教程
Pygame 教程
PyGTK 教程
PyQt 教程
PyQt5 教程
PyTorch 教程
Matplotlib 教程
Web2py 教程
BeautifulSoup 教程
Java 教程
HTML 教程
CSS 教程
CSS3 教程
jQuery 教程
Ajax 教程
AngularJS 教程
TypeScript 教程
WordPress 教程
Laravel 教程
Next.js 教程
PhantomJS 教程
Three.js 教程
Underscore.JS 教程
WebGL 教程
WebRTC 教程
VueJS 教程
SQL 教程
MySQL 教程
MongoDB 教程
PostgreSQL 教程
SQLite 教程
Redis 教程
MariaDB 教程
Vulkan 教程
OpenCV 教程
R语言 教程
Git 教程
VSCode 教程
Docker 教程
Gerrit 教程
Excel 教程
Go语言 教程
C++ 教程