Introduction
Mojo is gaining popularity not just for its performance and Python compatibility, but also for its clean approach to object-oriented programming (OOP). If you’re familiar with classes in Python or other languages, you’ll find Mojo’s OOP style both familiar and refreshingly structured. This article introduces how to work with objects in Mojo using struct, impl, constructors, and methods.
1. Understanding Structs in Mojo
In Mojo, the equivalent of a class is called a struct. Structs define the structure and data of an object, similar to data classes in Python or structs in Rust.
struct Person:
var name: String
var age: Int
This defines a simple Person struct with two properties: name and age.
2. Adding Behavior with impl Blocks
To define methods and logic associated with a struct, Mojo uses impl blocks. This is where you implement constructors, instance methods, and more.
impl Person:
fn __init__(inout self, name: String, age: Int):
self.name = name
self.age = age
fn greet(self):
print("Hello, my name is", self.name)
The __init__ function acts as a constructor, and greet is a simple method. Note that inout self allows mutation during construction.
3. Creating and Using Objects
You can now create a Person object and call its methods just like in other object-oriented languages.
let p = Person("Alice", 30)
p.greet() # Output: Hello, my name is Alice
4. Encapsulation and Readability
Mojo encourages clean encapsulation. You can separate logic into multiple impl blocks or even make read-only properties using let instead of var.
struct Book:
let title: String
var pages: Int
impl Book:
fn summary(self):
print("Book:", self.title, "-", self.pages, "pages")
5. Limitations and Best Practices
- Currently, Mojo does not support full inheritance like traditional OOP languages.
- Favor composition over inheritance where possible.
- Use multiple
implblocks to organize complex logic.
Conclusion
Mojo’s object-oriented features are both minimalistic and powerful. By combining struct and impl, you can build clean, modular, and maintainable code structures. Whether you’re building a data model or adding behavior to your app, Mojo’s OOP system gives you a solid foundation. As the language evolves, expect even more features for scalable, object-based development.
Want to explore more? Check out our previous post: Mojo Basics: Variables, Data Types, and Operators


Comment