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
'''