Skip to content

Commit 5c5d70f

Browse files
committed
SOLID: Final QA
1 parent 49bee99 commit 5c5d70f

File tree

2 files changed

+53
-41
lines changed

2 files changed

+53
-41
lines changed

solid-principles-python/file_manager_srp.py

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,49 +4,43 @@
44
# Bad example
55
# class FileManager:
66
# def __init__(self, filename):
7-
# self.filename = Path(filename)
7+
# self.path = Path(filename)
88

9-
# def read(self):
10-
# with self.filename.open(mode="r") as file:
11-
# data = file.read()
12-
# return data
9+
# def read(self, encoding="utf-8"):
10+
# return self.path.read_text(encoding)
1311

14-
# def write(self, data):
15-
# with self.filename.open(mode="w") as file:
16-
# file.write(data)
12+
# def write(self, data, encoding="utf-8"):
13+
# self.path.write_text(data, encoding)
1714

1815
# def compress(self):
19-
# with ZipFile(self.filename.stem + ".zip", mode="w") as archive:
20-
# archive.write(self.filename)
16+
# with ZipFile(self.path.with_suffix(".zip"), mode="w") as archive:
17+
# archive.write(self.path)
2118

22-
# def decompress(self, archive_name):
23-
# with ZipFile(archive_name, mode="r") as archive:
19+
# def decompress(self):
20+
# with ZipFile(self.path.with_suffix(".zip"), mode="r") as archive:
2421
# archive.extractall()
2522

2623

2724
# Good example
2825
class FileManager:
2926
def __init__(self, filename):
30-
self.filename = Path(filename)
27+
self.path = Path(filename)
3128

32-
def read(self):
33-
with self.filename.open(mode="r") as file:
34-
data = file.read()
35-
return data
29+
def read(self, encoding="utf-8"):
30+
return self.path.read_text(encoding)
3631

37-
def write(self, data):
38-
with self.filename.open(mode="w") as file:
39-
file.write(data)
32+
def write(self, data, encoding="utf-8"):
33+
self.path.write_text(data, encoding)
4034

4135

4236
class ZipFileManager:
4337
def __init__(self, filename):
44-
self.filename = Path(filename)
38+
self.path = Path(filename)
4539

4640
def compress(self):
47-
with ZipFile(self.filename.stem + ".zip", mode="w") as archive:
48-
archive.write(self.filename)
41+
with ZipFile(self.path.with_suffix(".zip"), mode="w") as archive:
42+
archive.write(self.path)
4943

50-
def decompress(self, archive_name):
51-
with ZipFile(archive_name, mode="r") as archive:
44+
def decompress(self):
45+
with ZipFile(self.path.with_suffix(".zip"), mode="r") as archive:
5246
archive.extractall()
Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,44 @@
1-
class Rectangle:
1+
from abc import ABC, abstractmethod
2+
3+
# Bad example
4+
# class Rectangle:
5+
# def __init__(self, width, height):
6+
# self.width = width
7+
# self.height = height
8+
9+
# def calculate_area(self):
10+
# return self.width * self.height
11+
12+
13+
# class Square(Rectangle):
14+
# def __init__(self, side):
15+
# super().__init__(side, side)
16+
17+
# def __setattr__(self, key, value):
18+
# super().__setattr__(key, value)
19+
# if key in ("width", "height"):
20+
# self.__dict__["width"] = value
21+
# self.__dict__["height"] = value
22+
23+
# Good example
24+
class Shape(ABC):
25+
@abstractmethod
26+
def calculate_area(self):
27+
pass
28+
29+
30+
class Rectangle(Shape):
231
def __init__(self, width, height):
332
self.width = width
433
self.height = height
534

6-
def area(self):
35+
def calculate_area(self):
736
return self.width * self.height
837

9-
def perimeter(self):
10-
return 2 * (self.width + self.height)
1138

12-
13-
class Square(Rectangle):
39+
class Square(Shape):
1440
def __init__(self, side):
15-
super().__init__(side, side)
1641
self.side = side
1742

18-
@property
19-
def side(self):
20-
return self._side
21-
22-
@side.setter
23-
def side(self, value):
24-
self._side = value
25-
self.width = value
26-
self.height = value
43+
def calculate_area(self):
44+
return self.side ** 2

0 commit comments

Comments
 (0)