Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python TypeError:「メソッド」オブジェクトはサブスクリプト可能ではありませんソリューション

Pythonメソッドの引数は、括弧内に指定する必要があります。これは、関数とメソッドの両方が、呼び出されているかどうかを示すために括弧を使用しているためです。角かっこを使用してメソッドを呼び出すと、「TypeError:‘method’ object isnotsubscriptable」エラーが発生します。

このガイドでは、このエラーの意味と、このエラーが発生する理由について説明します。このエラーの例を見ていき、ソリューションの開発に役立ててください。

TypeError:「メソッド」オブジェクトは添え字化できません

サブスクリプト可能なオブジェクトは、__getitem__メソッドを持つオブジェクトです。これらは、リスト、辞書、タプルなどのデータ型です。 __getitem__メソッドを使用すると、Pythonインタープリターはコレクションから個々のアイテムを取得できます。

すべてのオブジェクトが添え字化できるわけではありません。たとえば、メソッドはそうではありません。これは、__getitem__メソッドを実装していないためです。つまり、角括弧構文を使用してメソッド内の項目にアクセスしたり、メソッドを呼び出したりすることはできません。

次のコードスニペットについて考えてみます。

cheeses = ["Edam", "Stilton", "English Cheddar", "Parmesan"]
print(cheeses[0])

このコードは、インデックス位置0のチーズである「Edam」を返します。関数とメソッドは添字可能なオブジェクトではないため、角かっこを使用して関数またはメソッドを呼び出すことはできません。

シナリオ例

ここでは、チーズをオブジェクトに保存するプログラムを作成します。チーズを定義するために使用する「チーズ」クラスには、チーズが特定の原産国からのものであるかどうかを確認できるメソッドがあります。

チーズのクラスを定義することから始めます。このクラスをチーズと呼びます。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

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

このクラスには2つのメソッドが含まれています。最初のメソッドは、Cheeseオブジェクトの構造を定義します。 2つ目は、チーズの原産国が特定の値に等しいかどうかを確認します。

次に、Cheeseクラスからオブジェクトを作成します。

edam = Cheese("Edam", "Netherlands")

変数「edam」はオブジェクトです。チーズに関連する名前はエダムであり、その原産国はオランダです。

次に、get_country()を呼び出しましょう 方法:

edam.get_country["Germany"]

このコードはget_country()を実行します Cheeseクラスのメソッド。 get_country() メソッドは、「edam」オブジェクトの「origin」の値が「Germany」と等しいかどうかをチェックします。

コードを実行して、何が起こるかを確認します:

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.get_country("Netherlands")

私たちのコードは次を返します:

Edam is from Netherlands.

指定した値がチーズの原産国と等しい場合、コードは機能します。

結論

角かっこを使用してクラス内のメソッドを呼び出すと、「TypeError:「メソッド」オブジェクトは添字可能ではありません」というエラーが発生します。このエラーを解決するには、呼び出すメソッドの名前の後に中括弧を使用してクラスのメソッドのみを呼び出すようにしてください。

これで、プロのコーダーのようにこの一般的なPythonエラーを解決する準備が整いました!


  1. TypeError:「undefined」はJavaScriptのオブジェクトではありません

    「TypeError:「未定義」はオブジェクトではありません」エラーは、プロパティがアクセスされたとき、またはメソッドが未定義のオブジェクトで呼び出されたときに発生します。このエラーは、Safariブラウザでのみ表示されます。 以下はTypeErrorのコードです-「undefined」はJavaScriptのオブジェクトエラーではありません- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name=

  2. 'not in'演算子はPythonで何をしますか?

    Pythonでは、in演算子とin演算子はメンバーシップ演算子と呼ばれます。それらの目的は、オブジェクトが文字列、リスト、タプルなどの特定のシーケンスオブジェクトのメンバーであるかどうかを確認することです。 not in演算子は、オブジェクトが順番に存在する場合はfalseを返し、見つからない場合はtrueを返します >>> 'p' not in 'Tutorialspoint' False >>> 'c' not in 'Tutorialspoint' True >>> 10