รู้เบื้องต้นเกี่ยวกับ __getitem__: เมธอดมหัศจรรย์ใน Python

รู้เบื้องต้นเกี่ยวกับ __getitem__: เมธอดมหัศจรรย์ใน Python

โหนดต้นทาง: 2011206

รู้เบื้องต้นเกี่ยวกับ __getitem__: เมธอดมหัศจรรย์ใน Python
ภาพโดยผู้เขียน

Python เป็นภาษามหัศจรรย์ที่มีแนวคิดมากมายที่แม้แต่ผู้ใช้ขั้นสูงก็อาจไม่คุ้นเคย Dunder หรือ Magical method ก็เป็นหนึ่งในนั้น เมธอดเมธอดเป็นเมธอดพิเศษที่ล้อมรอบด้วยขีดล่างคู่ พวกเขาไม่ได้เรียกอย่างชัดเจนซึ่งแตกต่างจากวิธีการทั่วไปในไพ ธ อน วิธีการวิเศษอย่างหนึ่งคือ __getitem__ เมธอด ทำให้ออบเจกต์ Python ทำงานเหมือนลำดับหรือคอนเทนเนอร์ เช่น รายการ พจนานุกรม และทูเพิล ใช้ดัชนีหรือสไลซ์และดึงค่าที่เกี่ยวข้องจากคอลเลกชัน มันถูกเรียกใช้โดยอัตโนมัติเมื่อใดก็ตามที่เราใช้ indexer [ ] ตัวดำเนินการเพื่อเข้าถึงองค์ประกอบภายในวัตถุของคุณ

คิดว่าวิธีนี้เป็นไม้กายสิทธิ์ที่ให้พลังแก่คุณในการดึงข้อมูลที่จำเป็นเพียงแค่เขียนโค้ดไม่กี่บรรทัด น่าสนใจใช่มั้ย? วิธีนี้ยังใช้กันอย่างแพร่หลายในการวิเคราะห์ข้อมูลและการเรียนรู้ของเครื่อง ดังนั้นเรามาเจาะลึกลงไปใน __getitem__ วิธีการและค้นพบพลังและความยืดหยุ่นของมัน

ฉันต้องการให้คุณเข้าใจว่าหน้าที่ของคุณในฐานะโปรแกรมเมอร์ Python เป็นมากกว่าการเขียนโค้ดการทำงาน รหัสของคุณควรมีประสิทธิภาพ อ่านได้ และบำรุงรักษาได้ โดยใช้ __getitem__ จะช่วยให้คุณบรรลุเป้าหมายเหล่านี้ ต่อไปนี้เป็นประโยชน์อื่นๆ ของการใช้วิธีมายากลนี้:

  • ลดการใช้หน่วยความจำโดยให้คุณแยกเฉพาะข้อมูลที่จำเป็นแทนการโหลดโครงสร้างข้อมูลทั้งหมดลงในหน่วยความจำ
  • ให้ความยืดหยุ่นมากขึ้นในการจัดการและจัดการข้อมูล
  • ให้คุณวนซ้ำคอลเลคชันโดยไม่ต้องวนซ้ำข้อมูล
  • ปรับปรุงฟังก์ชันการทำงานโดยอนุญาตให้คุณเขียนการจัดทำดัชนีขั้นสูงที่อาจไม่สามารถทำได้ด้วยประเภทที่มีอยู่แล้วภายใน
  • ลดความซับซ้อนของรหัสเนื่องจากใช้สัญกรณ์ที่คุ้นเคย

ไวยากรณ์สำหรับ __getitem__ วิธีการมีดังนี้:

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

 

กำหนดพฤติกรรมของฟังก์ชันและรับดัชนีที่คุณพยายามเข้าถึงในพารามิเตอร์ เราสามารถใช้วิธีนี้ได้ดังนี้

my_obj[index] 

 

สิ่งนี้แปลเป็นคำสั่ง my_obj.__getitem__(index) ภายใต้ประทุน ตอนนี้คุณอาจคิดว่ามันแตกต่างจากในตัวอย่างไร indexer [] โอเปอเรเตอร์? ทุกที่ที่คุณใช้สัญลักษณ์นี้ python จะเรียกโดยอัตโนมัติ __getitem__ วิธีการสำหรับคุณและเป็นชวเลขสำหรับการเข้าถึงองค์ประกอบ แต่ถ้าคุณต้องการเปลี่ยนลักษณะการทำงานของการจัดทำดัชนีสำหรับออบเจกต์แบบกำหนดเอง คุณต้องเรียกใช้อย่างชัดเจน __getitem__ วิธี

ตัวอย่างที่ 01

เรามาเริ่มด้วยตัวอย่างง่ายๆ ก่อน เราจะสร้างชั้นเรียนของนักเรียนซึ่งจะมีรายชื่อนักเรียนทั้งหมดและเราสามารถเข้าถึงได้โดยใช้ดัชนีและพิจารณาว่าดัชนีแสดงถึงรหัสนักเรียนเฉพาะของพวกเขา

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])

 

Output:

 

ตอนนี้เราจะไปยังตัวอย่างขั้นสูงที่เราจะเปลี่ยนพฤติกรรมการจัดทำดัชนีโดยใช้ __getitem__ วิธี. สมมติว่าฉันมีรายการองค์ประกอบสตริงและฉันต้องการดึงข้อมูลองค์ประกอบเมื่อใดก็ตามที่ฉันป้อนตำแหน่งดัชนี และฉันยังสามารถรับตำแหน่งดัชนีได้หากฉันป้อนสตริงเอง

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']) 

 

Output:

red
green
0 2

วิธีนี้มีประโยชน์อย่างยิ่งสำหรับการค้นหาแอตทริบิวต์ของอินสแตนซ์อย่างรวดเร็ว เมื่อพิจารณาถึงความยืดหยุ่นและความอเนกประสงค์ของวิธีนี้แล้ว ฉันจะบอกว่านี่เป็นหนึ่งในวิธีการทางเวทมนตร์ของ Python ที่ไม่ค่อยได้ใช้มากที่สุด ฉันหวังว่าคุณจะสนุกกับการอ่านบทความนี้และแจ้งให้เราทราบในส่วนความคิดเห็นหากคุณสนใจที่จะรู้เกี่ยวกับวิธีการวิเศษอื่นๆ ใน Python
 
 
คันวัล เมเรน เป็นนักพัฒนาซอฟต์แวร์ที่มีความทะเยอทะยานและมีความสนใจอย่างมากในด้านวิทยาศาสตร์ข้อมูลและการประยุกต์ใช้ AI ในทางการแพทย์ Kanwal ได้รับเลือกให้เป็น Google Generation Scholar 2022 สำหรับภูมิภาค APAC Kanwal ชอบแบ่งปันความรู้ด้านเทคนิคโดยการเขียนบทความเกี่ยวกับหัวข้อที่กำลังมาแรง และมีความกระตือรือร้นเกี่ยวกับการปรับปรุงการเป็นตัวแทนของผู้หญิงในอุตสาหกรรมเทคโนโลยี
 

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต

เรื่องเด่น 13-19 ก.ย. นักวิทยาศาสตร์ข้อมูลที่ไม่มีทักษะด้านวิศวกรรมข้อมูลจะเผชิญกับความจริงที่รุนแรง The Machine & Deep Learning Compendium เปิดหนังสือ

โหนดต้นทาง: 1094099
ประทับเวลา: กันยายน 20, 2021