How to access Python objects within objects in Python?

In Python, it's common to have objects within objects, creating nested data structures. To access objects within objects, you can use the dot notation, which allows you to chain attribute access.

Basic Object Composition

Let's start with a simple example where a Person class contains an Address object ?

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.address = Address("123 Main St", "Anytown", "USA")

class Address:
    def __init__(self, street, city, country):
        self.street = street
        self.city = city
        self.country = country

p = Person("Alice", 25)
print(p.name)
print(p.age)
print(p.address.street)
print(p.address.city)
print(p.address.country)
Alice
25
123 Main St
Anytown
USA

More Complex Object Nesting

Here's an example with a Car class that contains an Engine object ?

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.engine = Engine("V6", 300)

class Engine:
    def __init__(self, engine_type, horsepower):
        self.engine_type = engine_type
        self.horsepower = horsepower

car = Car("Honda", "Accord", 2020)
print(f"Car: {car.make} {car.model} ({car.year})")
print(f"Engine: {car.engine.engine_type} with {car.engine.horsepower} HP")
Car: Honda Accord (2020)
Engine: V6 with 300 HP

Accessing Methods in Nested Objects

You can also call methods on nested objects using the same dot notation ?

class BankAccount:
    def __init__(self, account_number, balance):
        self.account_number = account_number
        self.balance = balance
        self.owner = AccountOwner("John Doe", "john@email.com")

class AccountOwner:
    def __init__(self, name, email):
        self.name = name
        self.email = email
    
    def get_contact_info(self):
        return f"{self.name} - {self.email}"

account = BankAccount("123456789", 5000)
print(f"Account: {account.account_number}")
print(f"Balance: ${account.balance}")
print(f"Owner: {account.owner.get_contact_info()}")
Account: 123456789
Balance: $5000
Owner: John Doe - john@email.com

Multiple Levels of Nesting

You can chain multiple dot operators to access deeply nested objects ?

class Company:
    def __init__(self, name):
        self.name = name
        self.department = Department("Engineering")

class Department:
    def __init__(self, name):
        self.name = name
        self.manager = Employee("Alice Smith", "Manager")

class Employee:
    def __init__(self, name, position):
        self.name = name
        self.position = position

company = Company("TechCorp")
print(f"Company: {company.name}")
print(f"Department: {company.department.name}")
print(f"Manager: {company.department.manager.name}")
print(f"Position: {company.department.manager.position}")
Company: TechCorp
Department: Engineering
Manager: Alice Smith
Position: Manager

Key Points

  • Use dot notation to access attributes and methods of nested objects
  • Chain multiple dots for deeper nesting: object.nested_object.attribute
  • Ensure proper initialization of nested objects in constructors
  • Handle potential None values to avoid AttributeError

Conclusion

Accessing objects within objects using dot notation is fundamental in Python object-oriented programming. This technique allows you to create complex data structures and access nested attributes and methods efficiently.

Updated on: 2026-03-25T15:03:04+05:30

243 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements