อาร์กิวเมนต์ในเมธอด Python ต้องระบุไว้ในวงเล็บ เนื่องจากทั้งฟังก์ชันและเมธอดใช้วงเล็บเพื่อระบุว่ามีการเรียกหรือไม่ หากคุณใช้วงเล็บเหลี่ยมเพื่อเรียกเมธอด คุณจะพบข้อผิดพลาด "TypeError:'method' object is not subscriptable"
ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และสาเหตุที่คุณอาจพบข้อผิดพลาดนี้ เราอธิบายตัวอย่างข้อผิดพลาดนี้เพื่อช่วยคุณพัฒนาวิธีแก้ปัญหา
TypeError:วัตถุ 'เมธอด' ไม่สามารถระบุได้
ออบเจ็กต์ที่เขียนทับได้คืออ็อบเจ็กต์ที่มีเมธอด __getitem__ เหล่านี้เป็นชนิดข้อมูล เช่น รายการ พจนานุกรม และทูเพิล เมธอด __getitem__ อนุญาตให้ล่าม Python ดึงไอเท็มแต่ละรายการจากคอลเล็กชัน
ออบเจ็กต์บางรายการไม่สามารถระบุได้ วิธีการเช่นไม่ได้ นั่นเป็นเพราะพวกเขาไม่ได้ใช้เมธอด __getitem__ ซึ่งหมายความว่าคุณไม่สามารถใช้ไวยากรณ์วงเล็บเหลี่ยมเพื่อเข้าถึงรายการในเมธอดหรือเรียกเมธอดได้
พิจารณาข้อมูลโค้ดต่อไปนี้:
cheeses = ["Edam", "Stilton", "English Cheddar", "Parmesan"] print(cheeses[0])
รหัสนี้ส่งคืน "Edam" ชีสที่ตำแหน่งดัชนี 0 เราไม่สามารถใช้วงเล็บเหลี่ยมเพื่อเรียกใช้ฟังก์ชันหรือเมธอดได้เนื่องจากฟังก์ชันและเมธอดไม่ใช่อ็อบเจ็กต์ที่ห้อยลงมาได้
ตัวอย่างสถานการณ์
ที่นี่ เราสร้างโปรแกรมที่เก็บชีสไว้ในวัตถุ คลาส “ชีส” ที่เราใช้กำหนดชีสจะมีวิธีการตรวจสอบว่าชีสมาจากประเทศต้นกำเนิดหรือไม่
เริ่มต้นด้วยการกำหนดคลาสสำหรับชีสของเรา เราเรียกชั้นนี้ว่าชีส:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
class Cheese: def __init__(self, name, origin): self.name = name self.origin = origin def get_country(self, to_compare): if to_compare == self.origin: print("{} is from {}.".format(self.name, self.origin)) else: print("{} is not from {}. It is from {}.".format(self.name, to_compare, self.origin))
ชั้นเรียนของเรามีสองวิธี วิธีแรกกำหนดโครงสร้างของวัตถุชีส อย่างที่สองให้เราตรวจสอบว่าประเทศต้นกำเนิดของชีสมีค่าเท่ากับค่าใดค่าหนึ่งหรือไม่
ต่อไป เราสร้างวัตถุจากคลาสชีสของเรา:
edam = Cheese("Edam", "Netherlands")
ตัวแปร "edam" เป็นวัตถุ ชื่อที่เกี่ยวข้องกับชีสคือ Edam และประเทศต้นกำเนิดคือเนเธอร์แลนด์
ต่อไป เรียก get_country()
. ของเรา กระบวนการ:
edam.get_country["Germany"]
รหัสนี้รัน get_country()
วิธีการจากคลาสชีส get_country()
วิธีตรวจสอบว่าค่าของ "ต้นกำเนิด" ในวัตถุ "edam" ของเราเท่ากับ "เยอรมนี" หรือไม่
เรียกใช้โค้ดของเราและดูว่าเกิดอะไรขึ้น:
Traceback (most recent call last): File "main.py", line 14, in <module> edam.get_country["Germany"] TypeError: 'method' object is not subscriptable
เกิดข้อผิดพลาดในรหัสของเรา
การแก้ปัญหา
มาวิเคราะห์บรรทัดของโค้ดที่โปรแกรมดีบั๊ก Python ระบุว่าผิดพลาด:
edam.get_country["Germany"]
ในโค้ดบรรทัดนี้ เราใช้วงเล็บเหลี่ยมเพื่อเรียก get_country()
กระบวนการ. ไวยากรณ์นี้ไม่เป็นที่ยอมรับ เนื่องจากมีการใช้วงเล็บเหลี่ยมเพื่อเข้าถึงรายการจากรายการ เนื่องจากฟังก์ชันและอ็อบเจ็กต์ไม่สามารถห้อยลงได้ เราจึงไม่สามารถใช้วงเล็บเหลี่ยมเพื่อเรียกฟังก์ชันเหล่านี้ได้
เพื่อแก้ไขข้อผิดพลาดนี้ เราต้องแทนที่วงเล็บเหลี่ยมด้วยวงเล็บปีกกา:
edam.get_country("Germany")
เรียกใช้รหัสของเราและดูว่าเกิดอะไรขึ้น:
Edam is not from Germany. It is from Netherlands.
รหัสของเราดำเนินการได้สำเร็จ เรามาลองเช็คกันว่า Edam มาจาก "เนเธอร์แลนด์" หรือไม่ เพื่อให้แน่ใจว่าฟังก์ชันของเราใช้งานได้ทุกกรณี ไม่ว่าค่าที่เราระบุจะเท่ากับประเทศต้นทางของชีสหรือไม่:
edam.get_country("Netherlands")
รหัสของเราส่งคืน:
Edam is from Netherlands.
รหัสของเราใช้งานได้หากค่าที่เราระบุเท่ากับประเทศต้นกำเนิดของชีส
บทสรุป
ข้อผิดพลาด "TypeError:'method' object is not subscriptable" ปรากฏขึ้นเมื่อคุณใช้วงเล็บเหลี่ยมเพื่อเรียกเมธอดภายในคลาส ในการแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณเรียกใช้เมธอดของคลาสโดยใช้วงเล็บปีกกาหลังชื่อของเมธอดที่คุณต้องการเรียกเท่านั้น
ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาดทั่วไปของ Python อย่างนักเขียนโค้ดมืออาชีพแล้ว!