Classes abstratas - Abstract Base Class (abc) - Python Orientado a Objetos
This commit is contained in:
37
aula142.py
Normal file
37
aula142.py
Normal file
@@ -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')
|
||||
Reference in New Issue
Block a user