Nameerror: name self is not defined

How to resolve the Python “nameerror: name self is not defined” error message?

We know that errors are inevitable that programmers or developers usually experience.

If you’re having a hard time dealing with this error message. Then, continue reading!

This article will walk you through how you are going to solve this error.

Apart from that, you will also understand what this error means and why it occurs in your Python script.

What is the meaning of “self” in Python?

“Self” is a special keyword in Python that refers to the instance of the object on which the method is being called.

It’s used to access the attributes and methods of the object.

What is “nameerror: name self is not defined”?

The “nameerror: name ‘self’ is not defined” error occurs when you’re trying to use the “self” keyword, but it hasn’t been defined.

For example:

class MyClass:
    x = 10

    def my_method():


When we run this code, it throws an error message:

NameError: name 'self' is not defined

This error triggers if you’re trying to use self outside of a class definition.

Or if you’ve forgotten to include self as the first parameter in a method definition within a class.

What are the root causes of this error?

The following are the several reasons why the “nameerror: name ‘self’ is not defined” error message occurs in your Python script:

❌ When you forget to specify the “self” argument in a method definition.

❌ When you are using a different name instead of “self” as the first parameter of a method.

❌ When you are calling a method on a class instead of an instance of the class.

❌ When you’re trying to access an instance variable or method from a class method without passing the instance as the first argument.

How to fix “nameerror: name self is not defined”?

To fix the “nameerror: name ‘self’ is not defined” error message in Python.

You need to ensure that you are passing the instance itself as the first argument to any instance method or attribute.

Solution 1: Specify the “self” keyword as the first parameter in method

When defining a method within a class, you have to specify “self” as the first argument so that the method can access the object’s attributes and methods.

For example:

class MyClass:
    name = "Caren"

    def my_method(self):

obj = MyClass()

As you can see we’ve specified the “self” keyword as the first argument in the method definition.

And we are calling the my_method method on an instance of the MyClass class rather than on the class itself.



Solution 2: Define the instance variable before accessing it

The error is raised because the instance variable is not properly defined before it is accessed.

For example:

class Person:
    def __init__(self, name, age): = name
        self.age = age

    def introduce(self):
        print("Hi, my name is " + + " and I am " + self.age + " years old.")

person = Person("Caren", "18") = "Caren"

To fix the error, you have to define the instance variable before accessing it. The code will be able to access the instance variable correctly.


Hi, my name is Caren and I am 18 years old.

When the error still exists after you try the provided solutions above, here are the things you need to do:

Check for typos

Ensure you haven’t accidentally misspelled “self” as something else.

Ensure that you’re using self within a class definition

The “self” keyword is only valid within the context of a class definition.

So, when you’re trying to use the “self” keyword outside of a class definition automatically, you will encounter this error.


The “nameerror: name ‘self’ is not defined” error occurs when you’re trying to use the “self” keyword, but it hasn’t been defined.

This article already provides solutions that will help you to fix the Pythonnameerror name ‘self’ is not defined”  error message

You could also check out other “nameerror” articles that may help you in the future if you encounter them.

Hoping that this article helps you fix the error. Thank you for reading itsourcecoders 😊