How to declare, initialize, and print a medium complexity, varied, feature‑rich data structure in Python

1 Answer

0 votes
from dataclasses import dataclass, field
from datetime import date
from typing import List, Optional


@dataclass
class Address:
    street: str = ""
    city: str = ""
    zipcode: int = 0


class Status:
    Active = "Active"
    Inactive = "Inactive"
    Unknown = "Unknown"


@dataclass
class Person:
    home_address: Address = field(default_factory=Address)
    favorite_numbers: List[int] = field(default_factory=lambda: [0] * 5)
    nickname: Optional[str] = None
    birth_date: date = date(1990, 1, 1)
    notes: str = "No notes"
    middle_name: Optional[str] = None
    hobbies: List[str] = field(default_factory=list)
    status: str = Status.Unknown


def print_person(p: Person):
    print(f"Address: {p.home_address.street}, {p.home_address.city} {p.home_address.zipcode}")

    print("Favorite Numbers:", " ".join(str(n) for n in p.favorite_numbers))

    print("Nickname:", p.nickname if p.nickname else "(none)")

    print("Birth Date:", p.birth_date.strftime("%Y-%m-%d"))

    print("Notes:", p.notes)

    print("Middle Name:", p.middle_name if p.middle_name else "(none)")

    print("Hobbies:", ", ".join(p.hobbies) + ", " if p.hobbies else "(none)")

    print("Status:", p.status)


# --- Usage example ---

p = Person()

p.home_address.street = "Fifth Avenue"
p.home_address.city = "New York"
p.home_address.zipcode = 423900

p.favorite_numbers = [7, 13, 21, 42, 99]

p.nickname = "Orion"

p.birth_date = date(1026, 6, 15)

p.notes = "Voss likes C/C++ and structs"

p.middle_name = "Pulse‑9"

p.hobbies = ["Coding", "Dreaming", "Walking", "Sci-Fi Movies"]

p.status = Status.Active

print_person(p)



'''
run:

Address: Fifth Avenue, New York 423900
Favorite Numbers: 7 13 21 42 99
Nickname: Orion
Birth Date: 1026-06-15
Notes: Voss likes C/C++ and structs
Middle Name: Pulse‑9
Hobbies: Coding, Dreaming, Walking, Sci-Fi Movies, 
Status: Active

'''

 



answered Sep 3 by avibootz

Related questions

...