From 093ea6f646b50f25bd3782385efb8ce526180ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luiz=20Ot=C3=A1vio?= Date: Fri, 18 Nov 2022 08:17:43 -0300 Subject: [PATCH] Classes abstratas - Abstract Base Class (abc) - Python Orientado a Objetos --- aula142.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 aula142.py diff --git a/aula142.py b/aula142.py new file mode 100644 index 0000000..e8be6ec --- /dev/null +++ b/aula142.py @@ -0,0 +1,37 @@ +# Classes abstratas - Abstract Base Class (abc) +# ABCs são usadas como contratos para a definição +# de novas classes. Elas podem forçar outras classes +# a criarem métodos concretos. Também podem ter +# métodos concretos por elas mesmas. +# @abstractmethods são métodos que não têm corpo. +# As regras para classes abstratas com métodos +# abstratos é que elas NÃO PODEM ser instânciadas +# diretamente. +# Métodos abstratos DEVEM ser implementados +# nas subclasses (@abstractmethod). +# Uma classe abstrata em Python tem sua metaclasse +# sendo ABCMeta. +# É possível criar @property @setter @classmethod +# @staticmethod e @method como abstratos, para isso +# use @abstractmethod como decorator mais interno. +from abc import ABC, abstractmethod + + +class Log(ABC): + @abstractmethod + def _log(self, msg): ... + + def log_error(self, msg): + return self._log(f'Error: {msg}') + + def log_success(self, msg): + return self._log(f'Success: {msg}') + + +class LogPrintMixin(Log): + def _log(self, msg): + print(f'{msg} ({self.__class__.__name__})') + + +l = LogPrintMixin() +l.log_error('Oi')