1.7. Principles for Code Quality#

1.7.1. The Law of Demeter#

It’s also known as the Principle of Least Knowledge, saying that an object should only communicate with its immediate neighbors, avoiding to access deeper and deeper objects.

See below for a small example how we would violate and obey the Law of Demeter.

# Bad Example
class Department:
    def __init__(self, manager):
        self.manager = manager

    def get_manager_name(self):
        # Bad: Accessing a method of an object deep within the hierarchy
        return self.manager.employee.name

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

class Manager:
    def __init__(self, employee):
        self.employee = employee

# Good Example
class Department:
    def __init__(self, manager):
        self.manager = manager
    
    def get_manager_name(self):
        # Good: Not going deeper
        return self.manager.get_name()

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

class Manager:
    def __init__(self, employee):
        self.employee = employee

    def get_name(self):
        return self.employee.name