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.name
internamente 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 @property
para 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 @property
decorador.
Primeiro, especificamos que o name()
método também é um atributo de Person. Isso é feito usando @property
o 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.setter
o método setter e @name.deleter
o 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.