Propriedade Python ()

A construção property () retorna o atributo property.

A sintaxe de property()é:

 propriedade (fget = None, fset = None, fdel = None, doc = None)

Leitura recomendada: Python @property: como usar e por quê?

Parâmetros propriedade ()

O property()leva quatro parâmetros opcionais:

  • fget (opcional) - Função para obter o valor do atributo. O padrão é None.
  • fset (opcional) - Função para definir o valor do atributo. O padrão é None.
  • fdel (opcional) - Função para excluir o valor do atributo. O padrão é None.
  • doc (opcional) - Uma string que contém a documentação (docstring) para o atributo. O padrão é None.

Valor de retorno da propriedade ()

property() retorna o atributo de propriedade do getter, setter e deleter fornecidos.

  • Se nenhum argumento for fornecido, property()retorna um atributo de propriedade base que não contém nenhum getter, setter ou deleter.
  • Se doc não for fornecido, property()obtém a docstring da função getter.

Exemplo 1: Crie um atributo com getter, setter e deleter

 class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name

Resultado

 Obtendo o nome O nome é: Adam Configurando o nome para John Excluindo o nome 

Aqui, _name é usado como a variável privada para armazenar o nome de Person.

Também definimos:

  • um método getter get_name()para obter o nome da pessoa,
  • um método setter set_name()para definir o nome da pessoa,
  • um método deleter del_name()para deletar o nome da pessoa.

Agora, definimos um novo nome de atributo de propriedade chamando o property()método.

Conforme mostrado no programa, referenciar p.nameinternamente chamadas get_name()como getter, set_name()setter e del_name()como deleter por meio da saída impressa presente dentro dos métodos.

Exemplo 2: usando o decorador @property

Em vez de usar property(), você pode usar o decorador Python @propertypara atribuir getter, setter e deleter.

 class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name

Resultado

 Obtendo o nome O nome é: Adam Configurando o nome para John Excluindo o nome 

Aqui, em vez de usar property(), usamos o @propertydecorador.

Primeiro, especificamos que o name()método também é um atributo de Person. Isso é feito usando @propertyo método before do getter, conforme mostrado no programa.

Em seguida, usamos o nome do atributo para especificar o configurador e o eliminador.

Isso é feito usando @name.settero método setter e @name.deletero método deleter.

Observe que usamos o mesmo método name()com diferentes definições para definir getter, setter e deleter.

Agora, sempre que usamos p.name, ele chama internamente o getter, setter e deleter apropriado, conforme mostrado pela saída impressa presente dentro do método.

Artigos interessantes...