Menu
Coddy logo textTech

Odwrócenie zależności

Lekcja 26 z 28 w kursie Czysty kod — pisz lepszy kod w Pythonie w Coddy.

„Polegaj na abstrakcjach, [nie] konkretach”.

Pokażmy przykład, który narusza tę zasadę,

class LocalStorage:
	def save(self, key, value):
		print("Saved, " + key + ":" + value)

Klasa LocalStorage zapisuje parę klucz i wartość.

Teraz mamy kolejną główną klasę, która korzysta z LocalStorage,

class App:
	def start(self, key, value):
		storage = LocalStorage()
		storage.save(key, value)

LocalStorage to konkretna implementacja, od której zależy App!

Lepszym rozwiązaniem byłoby utworzenie interfejsu (klasy abstrakcyjnej),

from abc import ABC, abstractmethod


class Storage(ABC):
	@abstractmethod
	def save(self):
		pass

A następnie użycie instancji interfejsu zamiast konkretnej implementacji. 

challenge icon

Wyzwanie

Łatwy

Otrzymujesz prawie gotowy kod. Dodaj klasę abstrakcyjną Storage.

Zauważ, że po implementacji łatwo jest zmienić ją na inną klasę konkretną, na przykład CloudStorage...

Spróbuj swoich sił

from abc import ABC, abstractmethod


# your code here


class LocalStorage(Storage):
	def save(self, key, value):
		print("Saved, " + key + ":" + value)


class App:
	def __init__(self, storage):
		self.storage = storage

	def start(self, key, value):
		storage.save(key, value)


if __name__ == "__main__":
	storage = LocalStorage()
	app = App(storage)
	key = input()
	value = input()
	app.start(key, value)

Wszystkie lekcje w sekcji Czysty kod — pisz lepszy kod w Pythonie

Poćwicz samodzielnie: Kompilator Python online