38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
# 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')
|