Python tutorials > Object-Oriented Programming (OOP) > Classes and Objects > What is `self`?
What is `self`?
In Python's object-oriented programming, self is a convention used as the first parameter in instance methods. It refers to the instance of the class on which the method is called. Understanding self is crucial for working with classes and objects effectively.
The Role of `self` in Class Methods
In this example, The self is used in the __init__ method to assign the name and breed arguments to the instance's attributes. When dog1.bark() is called, self automatically refers to the dog1 object. Thus, self.name accesses the name attribute of dog1.__init__ method is a special method (also called a constructor) and gets automatically called when an object of that class is created.
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f'{self.name} says Woof!')
dog1 = Dog('Buddy', 'Golden Retriever')
dog1.bark() # Output: Buddy says Woof!
Concepts Behind the Snippet
When you create an object from a class (instantiation), Python automatically passes the instance (the object itself) as the first argument to any instance method. By convention, this first parameter is named self. It allows the method to access and modify the object's attributes and call other methods on the same object.
Real-Life Use Case
Imagine you're building a game with a Here, Character class. Each character has attributes like health, strength, and position. Methods like move, attack, and take_damage would use self to update these attributes for the specific character instance. For example:
class Character:
def __init__(self, name, health, strength, position):
self.name = name
self.health = health
self.strength = strength
self.position = position
def move(self, distance):
self.position += distance
print(f'{self.name} moved to position {self.position}')
def take_damage(self, damage):
self.health -= damage
print(f'{self.name} took {damage} damage. Health is now {self.health}')
hero = Character('Aragorn', 100, 20, 0)
hero.move(10)
hero.take_damage(15)
self allows each Character instance to maintain its own independent state.
Best Practices
self as the first parameter name for instance methods. While you could technically use another name, it's a strong convention, and deviating from it makes your code less readable to other Python developers.self.x = something might work, self.name = something or self.age = something are much clearer.
Interview Tip
When asked about self in an interview, emphasize that it's a reference to the instance of the class. Explain how it's automatically passed to instance methods and how it's used to access and modify the object's attributes. Also, mention it is just a convention.
When to Use Them
You use self in every instance method of a class. An instance method is a method which belongs to an object. This is required to access attributes that are specific to that instance. If you write a function inside a class that doesn't need to access the instance’s data, consider making it a @staticmethod or a @classmethod.
Alternatives
There aren't really 'alternatives' to self in the traditional sense. It's fundamental to how Python's object model works. However, different design patterns might reduce the frequency with which you directly manipulate attributes using self, such as using properties with getters and setters for controlled access.
Pros
self makes it clear that you're working with the instance's attributes, improving code readability.
Cons
self confusing initially.self, but it's negligible in most cases.
FAQ
-
Can I use a different name instead of `self`?
Technically, yes, you can use a different name. However, it's strongly discouraged. Using
selfis a well-established convention in Python, and deviating from it will make your code harder to read and understand for other Python programmers. Tools like linters might even flag it as an error. -
Is `self` a keyword in Python?
No,
selfis not a keyword. It's just a convention for naming the first parameter of an instance method. You can technically use another name, but you shouldn't. -
What happens if I forget to include `self` as the first parameter in a method?
If you forget to include
selfas the first parameter, you'll get aTypeErrorwhen you call the method on an object. The error message will indicate that the method was called with one argument too few.