Python Basic Class Example (OOP)
This page shows a simple Python class example for beginners.
You will learn how to:
- Create a class
- Make an object from that class
- Store data in attributes
- Add behavior with a method
- Use
__init__to set starting values
If you are new to classes, this is a good first example because it uses a small real-world idea and keeps the code short.
Quick example
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} says woof!")
my_dog = Dog("Max", 3)
print(my_dog.name)
print(my_dog.age)
my_dog.bark()
Output:
Max
3
Max says woof!
Use this as your first working class example. It shows:
- A class
- An
__init__method - Attributes
- An object
- A method call
What this example teaches
This example helps you understand these basic OOP ideas:
- A class is a template or blueprint
- An object is one thing created from that class
- Attributes store data for the object
- Methods define what the object can do
__init__sets the starting values when the object is created
If you want a fuller beginner explanation, see Python classes and objects explained.
The example class
Here is the full class again before we break it down:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} says woof!")
This class uses:
Dogas the class namenameandageas the two attributesbark()as the one method
This is a good beginner example because it is small and easy to read.
How the __init__ method works
The __init__ method runs when you create a new object.
In this example:
def __init__(self, name, age):
self.name = name
self.age = age
Here is what each part means:
__init__is the special method Python uses to set up a new objectselfrefers to the current objectnameandageare values passed in when the object is createdself.name = namestores the value in the objectself.age = agestores the age in the object
So if you create Dog("Max", 3), Python does this setup:
namebecomes"Max"agebecomes3self.nameis set to"Max"self.ageis set to3
If self feels confusing, see the __init__ method in Python explained.
How to create an object
You create an object by calling the class name like a function:
my_dog = Dog("Max", 3)
This means:
Dogis the classmy_dogis the object"Max"and3are passed into__init__
You can create more than one object from the same class:
dog1 = Dog("Max", 3)
dog2 = Dog("Bella", 5)
print(dog1.name)
print(dog2.name)
Output:
Max
Bella
Both objects use the same class, but each object can store different values.
You can learn more in how to create an object in Python.
How to access attributes and call methods
Use dot notation to work with object data and behavior.
Read attributes
my_dog = Dog("Max", 3)
print(my_dog.name)
print(my_dog.age)
Output:
Max
3
This reads stored data from the object.
Call a method
my_dog = Dog("Max", 3)
my_dog.bark()
Output:
Max says woof!
This runs behavior defined in the class.
Data vs behavior
my_dog.namereads datamy_dog.agereads datamy_dog.bark()runs a method
If you want more method examples, see basic methods in Python classes explained.
Step-by-step code breakdown
Let’s go through the main lines one by one.
class Dog:
class Dog:
This creates a new class named Dog.
Think of it as a blueprint for making dog objects.
def __init__(self, name, age):
def __init__(self, name, age):
This defines the setup method for new objects.
When you create a Dog, Python runs this method automatically.
self.name = name
self.name = name
This creates an attribute named name on the object.
The value passed in becomes part of that object.
def bark(self):
def bark(self):
print(f"{self.name} says woof!")
This defines a method named bark.
It uses self.name so the message matches the current object.
my_dog = Dog("Max", 3)
my_dog = Dog("Max", 3)
This creates one Dog object and stores it in the variable my_dog.
At that moment:
self.namebecomes"Max"self.agebecomes3
Common beginner mistakes
Here are some common problems beginners run into with classes.
Forgetting self in method definitions
Wrong:
class Dog:
def bark():
print("Woof!")
Right:
class Dog:
def bark(self):
print("Woof!")
Inside a class, instance methods need self as the first parameter.
Forgetting parentheses when creating an object
Wrong:
my_dog = Dog
Right:
my_dog = Dog("Max", 3)
Without parentheses, you are referring to the class itself, not creating an object.
Using a method name without () when trying to call it
Wrong:
my_dog.bark
Right:
my_dog.bark()
Without (), Python gives you the method itself instead of running it.
Misspelling attribute names
Wrong:
print(my_dog.nam)
Right:
print(my_dog.name)
A misspelled attribute name can cause an AttributeError: object has no attribute.
Bad indentation inside the class
Wrong:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
Right:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
Python uses indentation to understand code blocks. Bad indentation can cause an IndentationError: expected an indented block.
Try it yourself
Once the basic example works, try these small changes:
- Change the object values
- Create a second
Dogobject - Print both objects' data
- Add another method such as
birthday()
Example:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} says woof!")
def birthday(self):
self.age += 1
print(f"{self.name} is now {self.age}")
dog1 = Dog("Max", 3)
dog2 = Dog("Bella", 5)
print(dog1.name, dog1.age)
print(dog2.name, dog2.age)
dog1.birthday()
Output:
Max 3
Bella 5
Max is now 4
This is a good next step after learning the basic example.
Common causes of confusion
Beginners often get stuck on these points:
- Confusing a class with an object
- Not understanding what
selfrefers to - Mixing up attributes and methods
- Indentation mistakes inside the class body
- Calling methods with missing required arguments
If that happens, test one small part at a time and print values often.
Useful debugging checks:
print(type(my_dog))
print(my_dog.name)
print(my_dog.age)
dir(my_dog)
help(Dog)
These can help you see:
- What type
my_dogis - Whether attributes exist
- What names and methods are available on the object
FAQ
What is the difference between a class and an object?
A class is a blueprint. An object is one created item based on that blueprint.
Why do I need self in a class?
self lets Python refer to the current object so each object can store its own data.
Is this page teaching all of OOP?
No. This page focuses on one simple class example. Broader OOP concepts belong on separate learn pages.
Can a class have more than one method?
Yes. A class can have many methods, but this example stays small to make the core idea clear.
See also
- Python classes and objects explained
- Object-oriented programming in Python explained
- The
__init__method in Python explained - How to create a class in Python
- How to add methods to a class in Python
After you understand this example, the next good step is to create your own class and then learn __init__ and methods in more detail.