-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path03_overriding_class_attributes.py
110 lines (72 loc) Β· 2.81 KB
/
03_overriding_class_attributes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""03 - Overriding class attributes in Python.
Use inheritance to override a class attribute of the Person class and call
method of base class.
"""
import typing
class Person:
"""A person has a name and likes to do things."""
def __init__(self, name: str):
self.name = name
def __str__(self) -> str:
return f"{self.name}"
def stay_hydrated(self) -> None:
print(f"{self} drinks some water. π°")
def go_to_the_movies(self) -> None:
print(f"{self} goes to the movies. πΏ")
def go_hiking(self) -> None:
print(f"{self} goes hiking. β°")
def build_a_robot(self) -> None:
print(f"{self} builds a robot. π€")
class Project:
"""A project has a board_name and a description."""
def __init__(self, board_name: str, description: str):
self.board_name = board_name
self.description = description
def __str__(self) -> str:
return f"Project '{self.board_name}'"
class TeamMember(Person):
"""A team member is a person, who works on projects, and may have
specialized in a specific field.
"""
expertise: typing.Optional[str] = None
def __str__(self) -> str:
# Get default string representation from the super class
default = super().__str__()
if self.expertise is None:
return f"{default}"
return f"{self.expertise} {default}"
def work_on_project(self, project: Project) -> None:
"""Start working on the given project."""
print(f"{self} is now working on {project}. π")
self.stay_hydrated()
class MobileEngineer(TeamMember):
"""Team member specialized in developing for mobile platforms."""
expertise = "π±"
class DataScientist(TeamMember):
"""Team member specialized in data science."""
expertise = "π"
class ProjectManager(TeamMember):
"""Team member specialized in project management."""
expertise = "π"
class OperationsEngineer(TeamMember):
"""Team member specialized in running cloud infrastructure."""
expertise = "π¦"
if __name__ == "__main__":
simone = OperationsEngineer("Simone")
simone.go_to_the_movies()
simone.build_a_robot()
simone.go_hiking()
chelsea = DataScientist("Chelsea")
dave = ProjectManager("Dave")
marlene = MobileEngineer("Marlene")
data_platform = Project(
board_name="Data Platform",
description="Platform providing datasets and data viewing tools.",
)
simone.work_on_project(data_platform)
chelsea.work_on_project(data_platform)
dave.work_on_project(data_platform)
marlene.work_on_project(data_platform)