Decorador de Propriedade
Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 10 de 64.
O decorador @property permite que você acesse métodos como atributos, proporcionando uma maneira limpa de obter e definir valores.
Aqui está um exemplo de uma classe usando @property:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2Crie um círculo e acesse as propriedades:
my_circle = Circle(5)Acesse propriedades como atributos comuns:
print(my_circle.radius)
print(my_circle.area)Saída:
5
78.53975Observe que você não usa parênteses () ao acessar propriedades - elas se parecem com atributos, mas executam código de método.
Adicione um setter para permitir a alteração de valores:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Agora você pode definir o raio como um atributo:
my_circle = Circle(5)
my_circle.radius = 10 # Usa o setter
print(my_circle.radius) # Usa o getterSaída:
10Ponto Chave: @property faz com que métodos pareçam atributos, enquanto @property_name.setter permite que você controle como os valores são atribuídos.
Folha de consulta
O decorador @property permite que você acesse métodos como atributos, fornecendo uma maneira limpa de obter e definir valores.
Uso básico de propriedades:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2Acesse propriedades sem parênteses:
my_circle = Circle(5)
print(my_circle.radius) # 5
print(my_circle.area) # 78.53975Adicione um setter para controlar a atribuição de valores:
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Defina valores como atributos:
my_circle.radius = 10 # Usa o setter
print(my_circle.radius) # Usa o getterExperimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Object Oriented Programming
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário