Propriedade de exclusão do Python

Resumo : neste tutorial, você aprenderá como usar a classe property() para excluir a propriedade de um objeto.

Para criar uma propriedade de uma classe, você usa o decorador @property . No fundo, o @propertydecorador usa a propertyclasse que possui três métodos: setter, getter e deleter.

Usando o deleter, você pode excluir uma propriedade de um objeto. Observe que o deleter()método exclui uma propriedade de um objeto, não uma classe .

O seguinte define a Personclasse com a namepropriedade:

from pprint import pprint


class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        if value.strip() == '':
            raise ValueError('name cannot be empty')
        self._name = value

    @name.deleter
    def name(self):
        del self._nameLinguagem de código:  Python  ( python )

Na Personaula usamos o @name.deleterdecorador. Dentro do deleter, usamos a delpalavra-chave para deletar o _nameatributo da Personinstância.

O seguinte mostra o __dict__da Personclasse:

pprint(Person.__dict__)Linguagem de código:  Python  ( python )

Saída:

mappingproxy({'__dict__': <attribute '__dict__' of 'Person' objects>,
              '__doc__': None,
              '__init__': <function Person.__init__ at 0x000001DC41D62670>,
              '__module__': '__main__',
              '__weakref__': <attribute '__weakref__' of 'Person' objects>,
              'name': <property object at 0x000001DC41C89130>})Linguagem de código:  Python  ( python )

A Person.__dict__classe tem a namevariável. O seguinte cria uma nova instância da Personclasse:

person = Person('John')Linguagem de código:  Python  ( python )

O person.__dict__tem o _nameatributo:

pprint(person.__dict__)Linguagem de código:  Python  ( python )

Saída:

{'_name': 'John'}Linguagem de código:  Python  ( python )

O seguinte usa a delpalavra-chave para excluir a namepropriedade:

del person.nameLinguagem de código:  Python  ( python )

Internamente, o Python executará o deletermétodo que exclui o _nameatributo do personobjeto. O person.__dict__estará vazio assim:

{}Linguagem de código:  Python  ( python )

E se você tentar acessar namea propriedade novamente, receberá um erro:

print(person.name)Linguagem de código:  Python  ( python )

Erro:

AttributeError: 'Person' object has no attribute '_name'Linguagem de código:  Python  ( python )

Resumo

  • Use o decorador deleter para excluir uma propriedade de uma instância de uma classe.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *