Hasattr Python

Resumo : neste tutorial, você aprenderá como usar a hasattr()função Python para verificar se um objeto possui um atributo nomeado.

Introdução à função hasattr() do Python

A hasattr()função retorna Truese um objeto tiver um atributo nomeado especificado por uma string:

hasattr(object, name)Linguagem de código:  Python  ( python )

A hasattr()função possui dois parâmetros:

  • objecté o objeto que você deseja verificar.
  • nameé uma string que especifica o nome do atributo.

O hasattr()retorno Truese o objeto possui um atributo com o nome especificado pela string nameou Falsenão.

Exemplo de função hasattr() em Python

O exemplo a seguir ilustra como usar a hasattr()função:

class Message:
    error = 'error'
    warning = 'warning'
    info = 'info'
    success = 'success'


result = hasattr(Message, 'error')
print(result)  # 👉 True


result = hasattr(Message, 'information')
print(result)  # 👉 FalseLinguagem de código:  Python  ( python )

Observe que tudo em Python é um objeto incluindo uma classe . Portanto, você pode passar uma classe para a hasattr()função.

Como funciona.

Primeiro, defina a Messageclasse com quatro atributos de classe:

class Message:
    error = 'error'
    warning = 'warning'
    info = 'info'
    success = 'success'Linguagem de código:  Python  ( python )

Segundo, use o hasattr()para verificar se a Messageclasse possui o erroratributo:

result = hasattr(Message, 'error')
print(result)  # 👉 TrueLinguagem de código:  Python  ( python )

Nesse caso, ele retorna Trueporque a Messageclasse possui o erroratributo.

Terceiro, use the hasattr()para verificar se Messagepossui o informationatributo:

result = hasattr(Message, 'information')
print(result)  # 👉 FalseLinguagem de código:  Python  ( python )

Neste exemplo, o hasattr()retorno é Falseporque a Messageclasse não possui o informationatributo.

Um exemplo prático da função hasattr() do Python

Na prática, você usa a hasattr()função para verificar se um objeto possui um atributo ou um método cujo nome só é conhecido em tempo de execução antes de acessá-lo. Por exemplo, você pode usar o hasattr()para verificar se um objeto possui um método antes de chamá-lo.

O exemplo a seguir aprimora a classe Validation do getattr()tutorial :


import re


class Validation:
    ERRORS = {
        'required': 'The {} is required',
        'email': 'The {} is not a valid email address'
    }

    def _required(self, value):
        return len(value) > 0

    def _email(self, value):
        pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
        return re.fullmatch(pattern, value)

    def validate(self, data, rules):
        errors = {}
        for field, rule in rules.items():
            if hasattr(self, f'_{rule}'):
                is_valid_method = getattr(self, f'_{rule}')
                if not is_valid_method(data[field]):
                    errors[field] = self.ERRORS[rule].format(field)
            else:
                errors[field] = f'The rule {rule} is not supported'

        return errors


if __name__ == '__main__':
    validation = Validation()
    data = {'name': 'Jane Doe', 'email': '[email protected]'}
    rules = {'name': 'required', 'email': 'email'}
    errors = validation.validate(data, rules)
    print(errors)
Linguagem de código:  Python  ( python )

Neste exemplo, hasattr()verifica se a Validationclasse possui um método com um nome que corresponda a uma regra antes de chamá-la. Se o método não existir, o validate()método adiciona uma entrada ao errorsdicionário.

Resumo

  • Use Python hasattr()para verificar se um objeto possui um atributo com nome.

Deixe um comentário

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