Python 메서드의 인수는 괄호 안에 지정해야 합니다. 이는 함수와 메서드가 모두 괄호를 사용하여 호출되는지 여부를 알 수 있기 때문입니다. 대괄호를 사용하여 메서드를 호출하면 "TypeError:'method' 개체가 첨자할 수 없습니다" 오류가 발생합니다.
이 가이드에서는 이 오류의 의미와 오류가 발생할 수 있는 이유에 대해 설명합니다. 솔루션 개발에 도움이 되도록 이 오류의 예를 살펴보겠습니다.
TypeError:'메서드' 개체를 첨자할 수 없습니다.
첨자 가능한 객체는 __getitem__ 메서드가 있는 객체입니다. 목록, 사전 및 튜플과 같은 데이터 유형입니다. __getitem__ 메서드를 사용하면 Python 인터프리터가 컬렉션에서 개별 항목을 검색할 수 있습니다.
모든 개체를 첨자할 수 있는 것은 아닙니다. 예를 들어 메소드는 그렇지 않습니다. 이는 __getitem__ 메서드를 구현하지 않기 때문입니다. 즉, 대괄호 구문을 사용하여 메서드의 항목에 액세스하거나 메서드를 호출할 수 없습니다.
다음 코드 조각을 고려하십시오.
cheeses =["에담", "스틸턴", "잉글리쉬 체다", "파마산"]print(치즈[0])
이 코드는 인덱스 위치 0에 있는 치즈인 "Edam"을 반환합니다. 함수와 메서드는 첨자할 수 있는 개체가 아니므로 대괄호를 사용하여 함수나 메서드를 호출할 수 없습니다.
예시 시나리오
여기에서 객체에 치즈를 저장하는 프로그램을 빌드합니다. 치즈를 정의하는 데 사용하는 "Cheese" 클래스에는 치즈가 특정 원산지 국가에서 왔는지 여부를 확인할 수 있는 메서드가 있습니다.
치즈에 대한 클래스를 정의하는 것으로 시작하십시오. 우리는 이 클래스를 치즈라고 부릅니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
class 치즈: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("{}는 {}에서 온 것이 아닙니다. {}에서 온 것입니다.".format(self.name, to_compare, self.origin))사전>우리 클래스에는 두 가지 메소드가 있습니다. 첫 번째 방법은 Cheese 개체의 구조를 정의합니다. 두 번째는 치즈의 원산지 국가가 특정 값과 같은지 여부를 확인하는 것입니다.
다음으로, 우리의 치즈 클래스에서 객체를 생성합니다:
edam =치즈("에담", "네덜란드")변수 "edam"은 객체입니다. 치즈와 관련된 이름은 Edam이고 원산지는 네덜란드입니다.
다음으로
get_country()
를 호출해 보겠습니다. 방법:
edam.get_country["독일"]이 코드는
get_country()
를 실행합니다. 치즈 클래스의 메소드.get_country()
메서드는 "edam" 개체의 "origin" 값이 "Germany"와 같은지 확인합니다.
코드를 실행하고 어떤 일이 일어나는지 확인하세요:
추적(가장 최근 호출 마지막):파일 "main.py", 줄 14,edam.get_country["Germany"]TypeError:'method' 개체를 첨자할 수 없습니다. 코드에 오류가 발생했습니다.
해결책
Python 디버거가 잘못된 것으로 식별한 코드 라인을 분석해 보겠습니다.
edam.get_country["독일"]이 코드 줄에서 대괄호를 사용하여
get_country()
를 호출합니다. 방법. 목록에서 항목에 액세스하는 데 대괄호가 사용되기 때문에 이것은 허용되지 않는 구문입니다. 함수와 객체는 첨자가 아니므로 대괄호를 사용하여 호출할 수 없습니다.
이 오류를 해결하려면 대괄호를 중괄호로 바꿔야 합니다.
edam.get_country("독일")코드를 실행하고 어떤 일이 일어나는지 봅시다:
Edam은 독일 사람이 아닙니다. 네덜란드에서 왔습니다.코드가 성공적으로 실행됩니다. Edam이 "네덜란드" 출신인지 확인하여 우리가 지정한 값이 치즈의 원산지 국가와 같은지 여부에 관계없이 모든 경우에 함수가 작동하는지 확인합니다.
edam.get_country("네덜란드")코드는 다음을 반환합니다.
Edam은 네덜란드 출신입니다.지정한 값이 치즈의 원산지 국가와 동일한 경우 코드가 작동합니다.
결론
"TypeError:'method' object is not subscriptable" 오류는 대괄호를 사용하여 클래스 내에서 메서드를 호출할 때 발생합니다. 이 오류를 해결하려면 호출하려는 메서드 이름 뒤에 중괄호를 사용하여 클래스의 메서드만 호출해야 합니다.
이제 전문 코더처럼 이 일반적인 Python 오류를 해결할 준비가 되었습니다!