1
resposta

Metodos Getters and Setters

Olá estou com duvida de como utilizar os metodos @property e @setter de maneira correta, fiz a seguinte codigo, mas ele não me parece muito correto.

class Alunos:
    def __init__(self, id, nome, ultimo_nome, idade, peso, altura):
        self.__id = id
        self.__nome = nome
        self.__ultimo_nome = ultimo_nome
        self.__idade = idade
        self.__peso = peso
        self.__altura = altura

    @altera_dados.setter
    def altera_dados(self, id, nome, ultimo_nome, idade):
        if self.__id == id:

            print(f'Os dados do ID: {self.__id} foram alterados: \n'
                  f'Nome: {self.__nome}\n'
                  f'Ultimo Nome: {self.__ultimo_nome}\n'
                  f'Idade: {self.__idade}\n'
                  f'Para os seguintes dados:\n')

            self.__nome = nome
            self.__ultimo_nome = ultimo_nome
            self.__idade = idade

            print(f'Nome: {self.__nome}\n'
                  f'Ultimo Nome: {self.__ultimo_nome}\n'
                  f'Idade: {self.__idade}')
        else:
            print(f'ID, digitado é invalido! ')

    @property
    def exibe_dados(self):
        print(f'ID: {self.__id}\n'
              f'Nome Completo: {self.__nome} \n'
              f'Ultimo Nome: {self.__ultimo_nome} \n'
              f'Idade: {self.__idade} \n'
              f'Peso: {self.__peso} \n'
              f'Altura: {self.__altura}')
1 resposta

Você precisa criar um getter e setter para cada propriedade. Para self.__id e self.__nome por exemplo:

### GETTER / SETTER para self._id
@property
def id(self):
    return self.__id

@id.setter
def id(self, novo_valor): 
    if novo_valor > 0:
        self.__id = novo_valor
    else:
        print("valor inválido, id precisa ser maior que 0")

### GETTER / SETTER para self._nome
@property
def nome(self): 
    return self.__nome

@nome.setter
def nome(self, novo_valor):
    if novo_valor:
        self.__nome = novo_valor.lowercase() # vc pode tratar a entrada como vc quiser
    else:
        print("valor inválido, nome precisa ter pelo menos um caracter")

Repare que para o getter, vc define a função com o mesmo nome da sua variavel privada self.__id mas sem o '__'.Para o setter é a mesma coisa, mas o decorator é diferente e tb leva o nome: @id.setter

# Para a propriedade self.__id, usar assim:
@property
def id(self):
    ...

@id.setter
def id(self, valor):
    ...