Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como deixar classe mais "pythonica"

Boa tarde pessoal, como posso deixar essa classe retangulo mais "pythonica"

class Retangulo:
    def __init__(self, comprimento, largura):
        self.comprimento = comprimento
        self.largura = largura

    def mudarLados(self, novo_comprimento, nova_largura):
        if novo_comprimento > 0 and nova_largura > 0:
            self.comprimento = novo_comprimento
            self.largura = nova_largura

    def retornarLados(self):
        return self.comprimento, self.largura

    def calcularPerimetro(self):
        return self.comprimento * 2 + self.largura * 2

    def calcularArea(self):
        return self.comprimento * self.largura
1 resposta
solução!

Olá, Marcos!

Eu faria dessa forma abaixo.

  • os atributos definidos como privados
  • acesso e modificação dos atributos através de métodos com os decorators
  • nomes de métodos no padrão palavra_palavra
class Retangulo:
    def __init__(self, comprimento, largura):
        self._comprimento = comprimento
        self._largura = largura

    @property
    def comprimento(self):
        return self._comprimento

    @comprimento.setter
    def comprimento(self, comprimento):
        self._comprimento = comprimento if comprimento > 0 else self._comprimento

    @property
    def largura(self):
        return self._largura

    @largura.setter
    def largura(self, largura):
        self._largura = largura if largura > 0 else self._largura

    def calcular_perimetro(self):
        return self.comprimento * 2 + self.largura * 2

    def calcular_area(self):
        return self.comprimento * self.largura

if __name__ == '__main__':
    #instancia
    retangulo = Retangulo(10, 20)
    print(f'Comprimento {retangulo.comprimento}')
    print(f'Largura {retangulo.largura}')
    print(f'Perímetro {retangulo.calcular_perimetro()}')
    print(f'Área {retangulo.calcular_area()}')
    #alteração
    retangulo.comprimento = 20
    retangulo.largura = 30
    print(f'Nova área {retangulo.calcular_area()}')

Saída:

Comprimento 10
Largura 20
Perímetro 60
Área 200
Nova área 600