Giới thiệu về __getitem__: Một phương pháp kỳ diệu trong Python

Giới thiệu về __getitem__: Một phương pháp kỳ diệu trong Python

Nút nguồn: 2011206

Giới thiệu về __getitem__: Một phương pháp kỳ diệu trong Python
Hình ảnh của Tác giả

Python là một ngôn ngữ kỳ diệu với nhiều khái niệm mà ngay cả người dùng cao cấp cũng có thể không quen thuộc. Phương pháp Dunder hoặc Magical là một trong số đó. Phương pháp ma thuật là phương pháp đặc biệt được bao quanh bởi dấu gạch dưới kép. Chúng không được gọi một cách rõ ràng không giống như các phương thức thông thường trong python. Một phương pháp ma thuật như vậy là __getitem__ phương thức, cho phép các đối tượng Python hoạt động giống như các chuỗi hoặc vùng chứa, ví dụ như danh sách, từ điển và bộ dữ liệu. Nó lấy chỉ mục hoặc lát cắt và truy xuất giá trị liên quan của nó từ bộ sưu tập. Nó được gọi tự động bất cứ khi nào chúng ta sử dụng indexer [ ] toán tử để truy cập các phần tử trong đối tượng của bạn.

Hãy coi phương pháp này như một cây đũa thần cho phép bạn trích xuất thông tin cần thiết chỉ bằng cách viết một vài dòng mã. Thú vị phải không? Phương pháp này cũng được sử dụng rộng rãi trong phân tích dữ liệu và học máy. Vì vậy, hãy đi sâu hơn vào __getitem__ phương pháp và khám phá sức mạnh và tính linh hoạt của nó.

Tôi muốn bạn hiểu rằng nhiệm vụ của bạn với tư cách là một lập trình viên Python không chỉ là viết mã chức năng. Mã của bạn phải hiệu quả, dễ đọc và có thể bảo trì. sử dụng __getitem__ sẽ giúp bạn đạt được những mục tiêu này. Dưới đây là một số lợi ích khác của việc sử dụng phương pháp kỳ diệu này:

  • Giảm mức sử dụng bộ nhớ bằng cách cho phép bạn chỉ trích xuất thông tin cần thiết thay vì tải toàn bộ cấu trúc dữ liệu vào bộ nhớ
  • Cung cấp tính linh hoạt cao hơn trong cách dữ liệu được xử lý và thao tác
  • Cho phép bạn lặp lại bộ sưu tập mà không cần lặp lại dữ liệu
  • Nâng cao chức năng bằng cách cho phép bạn viết chỉ mục nâng cao có thể không thực hiện được với các loại tích hợp sẵn
  • Đơn giản hóa mã vì nó sử dụng ký hiệu quen thuộc

Cú pháp cho __getitem__ như sau:

def __getitem__(self, index): # Your Implementation pass

 

Nó xác định hành vi của hàm và lấy chỉ mục mà bạn đang cố truy cập trong tham số của nó. Chúng ta có thể sử dụng phương pháp này như thế này:

my_obj[index] 

 

Điều này chuyển thành tuyên bố my_obj.__getitem__(index) dưới mui xe. Bây giờ bạn có thể nghĩ rằng nó khác với tích hợp như thế nào indexer [] nhà điều hành? Bất cứ nơi nào bạn sử dụng ký hiệu này, python sẽ tự động gọi __getitem__ phương thức cho bạn và là cách viết tắt để truy cập các phần tử. Nhưng nếu bạn muốn thay đổi hành vi lập chỉ mục cho các đối tượng tùy chỉnh, bạn cần gọi rõ ràng __getitem__ phương pháp.

Ví dụ 01

Trước tiên chúng ta hãy bắt đầu với một ví dụ đơn giản. Chúng tôi sẽ tạo một lớp Sinh viên sẽ có danh sách tất cả các sinh viên và chúng tôi có thể truy cập chúng theo chỉ mục và xem xét rằng chỉ mục đó đại diện cho ID sinh viên duy nhất của họ.

class Student: def __init__(self, names): self.names=names def __getitem__(self,index): return self.names[index] section_A= Student(["David", "Elsa", "Qasim"])
print(section_A[2])

 

Đầu ra:

 

Bây giờ chúng ta sẽ chuyển sang một ví dụ nâng cao nơi chúng ta sẽ thay đổi hành vi lập chỉ mục bằng cách sử dụng __getitem__ phương pháp. Giả sử rằng tôi có một danh sách các phần tử chuỗi và tôi muốn truy xuất phần tử bất cứ khi nào tôi nhập vị trí chỉ mục của nó và tôi cũng có thể lấy vị trí chỉ mục nếu tôi nhập chính chuỗi đó.

class MyList: def __init__(self, items): self.items = items def __getitem__(self, index): if isinstance(index, int): return self.items[index] elif isinstance(index, str): return self.items.index(index) else: raise TypeError("Invalid Argument Type") my_list = MyList(['red', 'blue', 'green', 'black']) # Indexing with integer keys
print(my_list[0]) print(my_list[2]) # Indexing with string keys
print(my_list['red']) print(my_list['green']) 

 

Đầu ra:

red
green
0 2

Phương pháp này cực kỳ hữu ích để tra cứu nhanh các thuộc tính của cá thể. Xem xét tính linh hoạt và tính linh hoạt của phương pháp này, tôi có thể nói đây là một trong những phương pháp ma thuật được sử dụng ít nhất của Python. Tôi hy vọng bạn thích đọc bài viết này và hãy cho tôi biết trong phần bình luận nếu bạn muốn biết về các phương thức kỳ diệu khác trong Python.
 
 
Kanwal Mehreen là một nhà phát triển phần mềm đầy tham vọng, rất quan tâm đến khoa học dữ liệu và các ứng dụng của AI trong y học. Kanwal đã được chọn là Google Generation Scholar 2022 cho khu vực APAC. Kanwal thích chia sẻ kiến ​​thức kỹ thuật bằng cách viết các bài báo về các chủ đề thịnh hành và đam mê cải thiện sự đại diện của phụ nữ trong ngành công nghệ.
 

Dấu thời gian:

Thêm từ Xe đẩy