Skip to content

Commit 76e3202

Browse files
committed
Add generics exercise
1 parent f422356 commit 76e3202

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

prep-exercises/generics.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from dataclasses import dataclass
2+
from typing import List
3+
4+
@dataclass(frozen=True)
5+
class Person:
6+
name: str
7+
age: int
8+
children: List["Person"]
9+
10+
sara = Person(name="Sara", age=5, children=[])
11+
ahmed = Person(name="Ahmed", age=8, children=[])
12+
13+
ali = Person(name="Ali", age=28, children=[sara])
14+
aya = Person(name="Aya", age=32, children=[ahmed])
15+
16+
imran = Person(name="Imran", age=55, children=[ali, aya])
17+
18+
def print_family_tree(person: Person) -> None:
19+
print(f"{person.name} ({person.age})")
20+
for child in person.children:
21+
print(f" - {child.name} ({child.age})")
22+
for grandchild in child.children:
23+
print(f" - {grandchild.name} ({grandchild.age})")
24+
25+
def count_family_members(person: Person) -> int:
26+
count = 1
27+
for child in person.children:
28+
count += count_family_members(child)
29+
return count
30+
31+
print_family_tree(imran)
32+
print(f"\nTotal family members: {count_family_members(imran)}")

0 commit comments

Comments
 (0)