Entenda Como Definir Propriedades em Classes Python

Definir propriedades em classes Python permite encapsular atributos e controlá-los com métodos getter e setter.

Como definir propriedades em classes Python?

Na Programação Orientada a Objetos (POO) em Python, propriedades são utilizadas para encapsular atributos e fornecer controle sobre seu acesso e modificação.

Criando atributos privados

A convenção em Python para atributos privados é prefixá-los com um sublinhado (_).

class Pessoa:  
    def __init__(self, nome, idade):  
        self._nome = nome  
        self._idade = idade  

p = Pessoa("Carlos", 30)  
print(p._nome)  # Acessando diretamente (não recomendado)  

Explicação do código

  1. Os atributos _nome e _idade são marcados como "privados" por convenção.
  2. Apesar de acessíveis diretamente, a prática recomendada é utilizar métodos para manipulá-los.

Utilizando getter e setter

Para controlar o acesso aos atributos, podemos criar métodos getter e setter.

class Pessoa:  
    def __init__(self, nome, idade):  
        self._nome = nome  
        self._idade = idade  

    def get_idade(self):  
        return self._idade  

    def set_idade(self, nova_idade):  
        if nova_idade > 0:  
            self._idade = nova_idade  
        else:  
            raise ValueError("Idade inválida")  

p = Pessoa("Carlos", 30)  
print(p.get_idade())  
p.set_idade(35)  
print(p.get_idade())  

Explicação do código

  1. O método get_idade() retorna o valor do atributo _idade.
  2. O método set_idade() valida a idade antes de modificá-la.

Utilizando @property para criar propriedades

O decorador @property é uma forma mais elegante de definir getters e setters.

class Pessoa:  
    def __init__(self, nome, idade):  
        self._nome = nome  
        self._idade = idade  

    @property  
    def idade(self):  
        return self._idade  

    @idade.setter  
    def idade(self, nova_idade):  
        if nova_idade > 0:  
            self._idade = nova_idade  
        else:  
            raise ValueError("Idade inválida")  

p = Pessoa("Carlos", 30)  
print(p.idade)  
p.idade = 40  
print(p.idade)  

Explicação do código

  1. @property transforma idade em uma propriedade acessível como atributo.
  2. @idade.setter permite modificar idade de forma segura.

Vantagens de usar propriedades

  • Maior controle sobre atributos da classe.
  • Facilita a manutenção do código.
  • Permite validar dados antes da modificação.

Propriedades em Python tornam o código mais organizado e seguro, permitindo que atributos sejam acessados e modificados de forma controlada. O uso de @property é altamente recomendado para evitar acesso direto a atributos privados.

Algumas aplicações:

  • Controle de acesso a atributos privados.
  • Validação de dados antes de modificar atributos.
  • Facilidade na refatoração de código.

Dicas para quem está começando

  • Utilize @property para tornar atributos acessíveis de forma controlada.
  • Evite acessar atributos privados diretamente.
  • Use validadores nos setters para evitar dados inconsistentes.
  • Teste suas classes antes de utilizá-las em projetos grandes.

Contribuições de Pedro Vasconcellos

Compartilhe este tutorial: Como definir propriedades em classes Python

Compartilhe este tutorial

Continue aprendendo:

Como usar super() em Python

A função super() em Python permite chamar métodos da classe pai, facilitando a reutilização de código e a herança.

Tutorial anterior

Como sobrescrever métodos em Python

A sobrescrita de métodos em Python permite que classes filhas redefinam comportamentos herdados da classe pai.

Próximo tutorial