55 lines
992 B
Python
55 lines
992 B
Python
# Funções decoradoras e decoradores com métodos
|
|
|
|
def meu_repr(self):
|
|
class_name = self.__class__.__name__
|
|
class_dict = self.__dict__
|
|
class_repr = f'{class_name}({class_dict})'
|
|
return class_repr
|
|
|
|
|
|
def adiciona_repr(cls):
|
|
cls.__repr__ = meu_repr
|
|
return cls
|
|
|
|
|
|
def meu_planeta(metodo):
|
|
def interno(self, *args, **kwargs):
|
|
resultado = metodo(self, *args, **kwargs)
|
|
|
|
if 'Terra' in resultado:
|
|
return 'Você está em casa'
|
|
return resultado
|
|
return interno
|
|
|
|
|
|
@adiciona_repr
|
|
class Time:
|
|
def __init__(self, nome):
|
|
self.nome = nome
|
|
|
|
|
|
@adiciona_repr
|
|
class Planeta:
|
|
def __init__(self, nome):
|
|
self.nome = nome
|
|
|
|
@meu_planeta
|
|
def falar_nome(self):
|
|
return f'O planeta é {self.nome}'
|
|
|
|
|
|
brasil = Time('Brasil')
|
|
portugal = Time('Portugal')
|
|
|
|
terra = Planeta('Terra')
|
|
marte = Planeta('Marte')
|
|
|
|
print(brasil)
|
|
print(portugal)
|
|
|
|
print(terra)
|
|
print(marte)
|
|
|
|
print(terra.falar_nome())
|
|
print(marte.falar_nome())
|