Python TypeError: Method_Name() missing 1 required positional argument: 'self' Solution

Posted in /  

Python TypeError: Method_Name() missing 1 required positional argument: 'self' Solution
vinaykhatri

Vinay Khatri
Last updated on March 28, 2024

    In Python, we first need to initialize an object for a class before we call any of the methods defined inside the class. We can access the class variables using the class name followed by the dot operator and variable name. But if we try to access a class method using the class name, we will encounter the error TypeError: Method_Name() missing 1 required positional argument: 'self' .

    In this guide, we will discuss the above error in detail and learn why it arises in Python. We will also walk through some common examples where many Python learners encounter this error.

    So without further ado, let's get started.

    Python Error - TypeError: Method_Name() missing 1 required positional argument: 'self'

    A class is a blueprint for objects, and its functionalities come into existence when we initialize its objects. If there is a method inside a class, we can only call that method using the class object and not with the class name.

    This is because, in Python class , all methods have a fixed argument value self (conventional name), representing the object calling the method. When we call the method using the class name, we receive the error TypeError: Method_Name() missing 1 required positional argument: 'self' .

    Now, let's break the error statement into two parts.

    1. TypeError
    2. Method_Name() missing 1 required positional argument: 'self'

    1. TypeError

    TypeError is a standard Python exception. It occurs when we perform an operation or call a function/method on an inappropriate Python data object.

    2.  Method_Name() missing 1 required positional argument: 'self'

    This error message occurs when we try to call a method using the class name. We can only call a class method using its object. All class methods have a fixed argument self that needs to be passed to the method when called. And the value of self can only be passed to the method when the method is called with the help of the class object because the class object is the value for the self attribute.

    Common Example Scenario

    There are two most common cases when you might encounter the above error.

    1. Calling a method using Class Name
    2. Incorrect Initialization of Class Object

    1. Calling a method using a Class Name

    The core reason why we receive this error is when we use the class name to call a method rather than the object name.

    Example

    class Human:
    	def __init__(self):
    		self.species = "Homo sapiens"
    		self.avg_age = "79 years"
    
    
    	def show_data(self):
    		print("Species Name: ", self.species)
    		print("Average Age of a Human: ", self.avg_age)
    
    Human.show_data()

    Output

    Traceback (most recent call last):
      File "main.py", line 11, in 
        Human.show_data()
    TypeError: show_data() missing 1 required positional argument: 'self'

    Break the code

    In the above example, we get the error because we called the show_data() method using the class name Human . When a method is invoked, it accepts the value for the self attribute, and it can only be satisfied when an object of the class calls the method. The object that calls the method becomes the value for the self attribute.

    Solution

    To solve the above method, we first need to initialize the object for the Human class. Later, we can use that object name to call the show_data() method.

    class Human:
    	def __init__(self):
    		self.species = "Homo sapiens"
    		self.avg_age = "79 years"
    
    
    	def show_data(self):
    		print("Species Name: ", self.species)
    		print("Average Age of a Human: ", self.avg_age)
    
    # initialize object
    human = Human()
    
    # access method using object name
    human.show_data()

    Output

    Species Name: Homo sapiens
    Average Age of a Human: 79 years

    2. Incorrect Initialization of class Object

    This error also occurs when we do not properly initialize the object for a class. When we initialize or declare a class object, we write the object name, followed by the assignment operator, the class name, and a set of parenthesis. When we forget to put the parenthesis, it will not initialize the class; instead, it will provide an alternative name to the class.

    Example

    class Human:
    	def __init__(self):
    		self.species = "Homo sapiens"
    		self.avg_age = "79 years"
    
    
    	def show_data(self):
    		print("Species Name: ", self.species)
    		print("Average Age of a Human: ", self.avg_age)
    
    # forget to put () after class name
    human = Human
    
    # access method using object name
    human.show_data()

    Output

    Traceback (most recent call last):
      File "main.py", line 15, in 
        human.show_data()
    TypeError: show_data() missing 1 required positional argument: 'self'

    Break the Code

    In this example, we get the same error. This is because, in line 12, when we initialized the object for the Human class, we forgot to put the parenthesis () after the class name " human = Human " .

    The statement human = Human did not create the object human ; instead, it simply provides an alternative name to the Human class. At this point, both Human and human are the same.

    Solution

    To solve the above example, we need to properly initialize the object for the Human class.

    class Human:
    	def __init__(self):
    		self.species = "Homo sapiens"
    		self.avg_age = "79 years"
    
    
    	def show_data(self):
    		print("Species Name: ", self.species)
    		print("Average Age of a Human: ", self.avg_age)
    
    # put () after class name
    human = Human()
    
    # access method using object name
    human.show_data()

    Output

    Species Name: Homo sapiens
    Average Age of a Human: 79 years

    Wrapping Up!

    This was all about one of the most common Python errors " TypeError: method_name() missing 1 required positional argument: 'self'". This error occurs in a Python program when we call a class method with the help of the class name rather than its object. To solve this error, make sure that you have initialized the class object properly before calling the method on that object. In most cases, you will encounter this error when you haven't declared the object correctly.

    If you still get this error in your Python program, you can share your code and query in the comment section. We will try to help you with debugging.

    People are also reading:

    Leave a Comment on this Post

    0 Comments