
One error that you might encounter when working with Python is:
TypeError: 'method' object is not subscriptable
This error occurs when you mistakenly call a class method using the square [] brackets instead of round () brackets.
The error is similar to the [‘builtin_function_or_method’ object is not subscriptable]({{ <ref “06-python-builtinfunctionormethod-object-is-not-subscriptable”>}}) in nature, except the error source is from a method you defined instead of built-in Python methods.
Let’s see an example that causes this error and how to fix it.
How to reproduce this error
Suppose you wrote a Python class in your code with a method defined in that class:
class Human:
    def talk(self, message):
        print(message)
Next, you create an instance of that class and call the talk() method, but instead of using parentheses, you used square brackets as shown below:
class Human:
    def talk(self, message):
        print(message)
person = Human()
person.talk["How are you?"]
The square brackets around talk["How are you?"] will cause an error:
Traceback (most recent call last):
  File "main.py", line 8, in <module>
    person.talk["How are you?"]
TypeError: 'method' object is not subscriptable
This is because Python thinks you’re trying to access an item from the talk variable instead of calling it as a method.
To resolve this error, you need to put parentheses around the string argument as follows:
person = Human()
person.talk("How are you?")  # ✅
By replacing the square brackets with parentheses, the function can be called and the error is resolved.
Sometimes, you get this error when you pass a list to a function without adding the parentheses.
Suppose the Human class has another method named greet_friends() which accepts a list of strings as follows:
class Human:
    def greet_friends(self, friends_list):
        for name in friends_list:
            print(f"Hi, {name}!")
Next, you create an instance of Human and call the greet_friends() method:
person = Human()
person.greet_friends['Lisa', 'John', 'Amy']  # ❌
Oops! The greet_friends method lacked parentheses, so you get the same error:
Traceback (most recent call last):
  File "main.py", line 8, in <module>
    person.greet_friends['Lisa', 'John', 'Amy']
TypeError: 'method' object is not subscriptable
Even when you’re passing a list to a method, you need to surround the list using parentheses as follows:
person.greet_friends( ['Lisa', 'John', 'Amy'] )  # ✅
By adding the parentheses, the error is now resolved and the person is able to greet those friends:
Hi, Lisa!
Hi, John!
Hi, Amy!
Conclusion
The TypeError: ‘method’ object is not subscriptable occurs when you call a class method using the square brackets instead of parentheses.
To resolve this error, you need to add parentheses after the method name. This rule applies even when you pass a list to the method as shown in the examples.
I hope this tutorial is helpful. See you in other tutorials! 👍