DEV Community

Coder
Coder

Posted on

TypeError: missing 1 required positional argument: 'self'

If you're a Python developer, there's a good chance you've come across the TypeError: Missing 1 Required Positional Argument: 'self' error at some point in your coding journey. This error occurs when you attempt to call a method on an instance of a class without passing in a reference to that instance as the first argument. In this post, we'll cover what this error means, how to fix it, and some common scenarios where it might occur.

Understanding the Error

Let's say you have a class named SomeClass with a method named some_method. You create an instance of this class named some_instance, and then attempt to call the some_method method on that instance:

class SomeClass:
    def some_method(self, arg1):
        # do something

some_instance = SomeClass()
some_instance.some_method("test")
Enter fullscreen mode Exit fullscreen mode

If you run this code, you will get the following error:

TypeError: some_method() missing 1 required positional argument: 'arg1'
Enter fullscreen mode Exit fullscreen mode

The error message indicates that you are missing a required argument for the some_method method. But why is this happening? The answer lies in the first argument of the method definition: self.

In Python, classes have a special parameter named self that is used to refer to the instance of the class. When you define a method in a class, the first parameter should always be self, even if you do not need to use it inside the method. This is because Python automatically passes the instance of the class as the first argument when you call a method on an instance.

Fixing the Error

To fix the TypeError: Missing 1 Required Positional Argument: 'self' error, you need to make sure you are passing in a reference to the instance of the class as the first argument when calling a method on that instance.

Using the previous example, you would need to modify the code to include the self parameter in the method definition, like this:

class SomeClass:
    def some_method(self, arg1):
        # do something

some_instance = SomeClass()
some_instance.some_method(some_instance, "test")
Enter fullscreen mode Exit fullscreen mode

Notice that we are passing in some_instance as the first argument to the some_method method. This tells Python to pass in the instance of the class as the first argument, so that the self parameter inside the method points to the correct instance.

Common Scenarios

Now that you understand what the TypeError: Missing 1 Required Positional Argument: 'self' error means and how to fix it, let's look at some common scenarios where you might encounter this error in your code.

Missing 'self' Parameter

The most common cause of the TypeError: Missing 1 Required Positional Argument: 'self' error is simply forgetting to include the self parameter in the method definition. If you define a method without self as the first parameter, you will get this error when you try to call that method on an instance of the class.

class SomeClass:
    def some_method(arg1):  # missing 'self' parameter
        # do something

some_instance = SomeClass()
some_instance.some_method("test")
Enter fullscreen mode Exit fullscreen mode

To fix this error, simply add the self parameter to the method definition.

Incorrect First Parameter

Another common scenario is passing in the wrong object as the first argument when calling a method on an instance. For example, you might accidentally pass in a different instance of the same class, or a completely unrelated object.

class SomeClass:
    def some_method(self, arg1):
        # do something

some_instance1 = SomeClass()
some_instance2 = SomeClass()
some_instance1.some_method(some_instance2, "test")  # incorrect first parameter
Enter fullscreen mode Exit fullscreen mode

In this case, Python will interpret some_instance2 as the self parameter inside the some_method method, which will cause the TypeError: Missing 1 Required Positional Argument: 'self' error.

To fix this error, make sure you are passing in the correct instance of the class as the first argument when calling a method on that instance.

Incorrect Method Name

Finally, it's possible to get the TypeError: Missing 1 Required Positional Argument: 'self' error if you accidentally call a non-existent method on an instance of a class. This can happen if you misspell the method name, or if you call a method that doesn't exist in the class definition.

class SomeClass:
    def some_method(self, arg1):
        # do something

some_instance = SomeClass()
some_instance.nonexistent_method("test")  # incorrect method name
Enter fullscreen mode Exit fullscreen mode

In this case, Python will not be able to find the nonexistent_method method in the SomeClass class definition, which will cause the TypeError: Missing 1 Required Positional Argument: 'self' error.

To fix this error, make sure you are calling the correct method name on an instance of the class.

Conclusion

The TypeError: Missing 1 Required Positional Argument: 'self' error is a common error that Python developers may encounter when working with classes and methods. To fix this error, you need to make sure you are including the self parameter in the method definition, and passing in a reference to the instance of the class as the first argument when calling a method on that instance. By understanding the causes and solutions to this error, you can write better Python code and avoid potential errors in your programs.

Top comments (0)