Skip to content

Instantly share code, notes, and snippets.

@MaxMorais
Last active October 15, 2020 01:31
Show Gist options
  • Save MaxMorais/11a5af46b922ab7076e5ed1306dbcb28 to your computer and use it in GitHub Desktop.
Save MaxMorais/11a5af46b922ab7076e5ed1306dbcb28 to your computer and use it in GitHub Desktop.
class Maiusculo(object):
""""Classe que converte qualquer coisa, para texto em maiúsculo"""
def __init__(self, valor):
"""__init__ é o inicializador da instância da classe, é ele que associa
os atributos da instância da classe com os argumentos recebidos"""
   
# Definimos um atributo chamado valor no contexto (self), e convertemos o "valor" do argumento valor
# para uma str em maiúscula (upper)
self.valor = str(valor).upper()
def __str__(self): 
"""__str__ é o método que será "invocado" pela linguagem ao tentar converter
um "Objeto" do tipo "Miusculo" para o tipo "str" """
# Convertemos e retornamos uma string
return str(self.valor)
def __repr__(self):
"""__repr__ é o método que será "invocado" pela linguagem ao tentar imprimir a
representação gráfica de um objeto "Maiusculo" """
# Convertemos e retornamos a representação de valor
return repr(self.valor)
    def __add__(self, outro_valor):
"""__add__ é o método que será "invocado" pela linguagem ao tentar somar
("concatenar") um "Maiusculo" a outro "Objeto", note que aqui
vemos uma sobrecarga de operadores. """
#Caso o objeto seja uma string, ou Maiusculo, devolvemos a operação
if isinstance(outro_valor, (str, Maiusculo)): 
return Maiusculo(str(self) + str(outro_valor))
# Se não, delegamos a responsabilidade de concatenação ao objeto
return NotImplemented
def minuscula(self)
"""minuscula é o método que será "invocado" pelo desenvolvedor ao tentar
converter um objeto "Maiusculo" e um "str" com todas as letras em minusculo"""
return str(self.valor.lower())
if __name__ == "__main__":
cidade = Maiusculo("sao paulo")
assert cidade.data == "SAO PAULO", "Houve uma falha na conversão para Maiusculo"
assert str(cidade) == "SAO PAULO", "Houve uma falha na conversão para str"
cidade_estado = cidade + ", sp"
assert cidade_estado.data == "SAO PAULO, SP", "Houve uma falha na concatenação com Maiusculo"
assert repr(cidade_estado) == "'SAO PAULO, SP'", "Houve uma falha na representação de um Maiusculo"
assert cidade_estado.minuscula() == "sao paulo, sp", "Houve uma falha na conversão de Maiusculo para minusculo"
assert isinstance(cidade_estado.minuscula(), str), "Houve uma falha na conversão de tipos entre Maiusculo e str"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment