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
- Os atributos
_nome
e_idade
são marcados como "privados" por convenção. - 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
- O método
get_idade()
retorna o valor do atributo_idade
. - 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
@property
transformaidade
em uma propriedade acessível como atributo.@idade.setter
permite modificaridade
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.
Por que utilizar propriedades em Python?
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