Skip to content

Commit e94e817

Browse files
committed
OOP
1 parent 4f96d1b commit e94e817

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

week-5-prep/oop.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Personal stretch exercise - Review not required
2+
from abc import ABC, abstractmethod
3+
from dataclasses import dataclass, field
4+
5+
@dataclass
6+
class Person(ABC):
7+
first_name: str
8+
last_name: str
9+
10+
@abstractmethod
11+
def get_full_name(self) -> str: ...
12+
13+
@dataclass
14+
class Parent(Person):
15+
def get_full_name(self) -> str:
16+
return f"{self.first_name} {self.last_name}"
17+
18+
@dataclass
19+
class Child(Person):
20+
previous_last_names: list[str] = field(default_factory=list)
21+
22+
def change_last_name(self, last_name: str) -> None:
23+
self.previous_last_names.append(self.last_name)
24+
self.last_name = last_name
25+
26+
def get_full_name(self) -> str:
27+
suffix = ""
28+
if len(self.previous_last_names) > 0:
29+
suffix = f" (née {self.previous_last_names[0]})"
30+
return f"{self.first_name} {self.last_name}{suffix}"
31+
32+
person1 = Child("Jane", "Doe")
33+
print(person1.get_full_name())
34+
person1.change_last_name("Smith")
35+
print(person1.get_full_name())
36+
37+
person2 = Parent("John", "Doe")
38+
print(person2.get_full_name())

0 commit comments

Comments
 (0)