MediumPro challengePython

Null Object Pattern

PythonClean CodeDesign PatternsRefactoring

Defensive None checks scattered throughout code are a smell.

# dirty — None checks everywhere
def solve(user):
    name = user['name'] if user else 'Anonymous'
    email = user['email'] if user else 'no-email@placeholder.com'
    role = user['role'] if user else 'guest'
    return {'name': name, 'email': email, 'role': role}

Refactor using a Null Object: create a GUEST_USER constant that provides safe defaults, then use it when user is None.

solve(None){'name': 'Anonymous', 'email': 'no-email@placeholder.com', 'role': 'guest'}

Sample tests

Test #1None returns guest defaults
Input: [null]
Output: {"name":"Anonymous","role":"guest","email":"no-email@placeholder.com"}
Test #2Real user passes through unchanged
Input: [{"name":"Alice","role":"admin","email":"a@b.com"}]
Output: {"name":"Alice","role":"admin","email":"a@b.com"}
Test #3User with empty name is not treated as None
Input: [{"name":"","role":"user","email":"x@y.com"}]
Output: {"name":"","role":"user","email":"x@y.com"}