Функция hasattr() в Python и практические примеры
Функция hasattr() используется в Python для проверки наличия у объекта именованного атрибута.
- Что такое функция hasattr() в Python?
- Пример функции hasattr() в Python
- Практический пример метода hasattr() в Python
Что такое функция hasattr() в Python?
Функция hasattr() возвращает True, если объект имеет именованный атрибут, заданный строкой:
hasattr(object, name)
Функция hasattr() имеет два параметра:
- object — объект, который вы хотите проверить.
- name — это строка, определяющая имя атрибута.
Hasattr() возвращает True, если объект имеет атрибут с именем, указанным в строке name, или False в противном случае.
Пример функции hasattr() в Python
Следующий пример иллюстрирует использование функции hasattr():
class Message: error = 'error' warning = 'warning' info = 'info' success = 'success' result = hasattr(Message, 'error') print(result) # 👉 True result = hasattr(Message, 'information') print(result) # 👉 False
Обратите внимание, что в Python все является объектом, включая класс. Поэтому вы можете передать класс в функцию hasattr().
Как это работает.
- Сначала определите класс Message с четырьмя атрибутами класса:
class Message: error = 'error' warning = 'warning' info = 'info' success = 'success'
- Во-вторых, используйте hasattr(), чтобы проверить, имеет ли класс Message атрибут error:
result = hasattr(Message, 'error') print(result) # 👉 True
В этом случае возвращается значение True, поскольку класс Message имеет атрибут error.
- В-третьих, используйте hasattr(), чтобы проверить, имеет ли Message атрибут information:
result = hasattr(Message, 'information') print(result) # 👉 False
В этом примере hasattr() возвращает False, поскольку класс Message не имеет атрибута information.
Практический пример метода hasattr() в Python
На практике вы используете функцию hasattr(), чтобы проверить, есть ли у объекта атрибут или метод с именем, известным только во время выполнения, перед доступом к нему. Например, вы можете использовать hasattr(), чтобы проверить, есть ли у объекта метод, перед его вызовом.
Следующий пример расширяет класс Validation из руководства getattr():
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)
В этом примере hasattr() проверяет, есть ли у класса Validation метод с именем, соответствующим правилу, перед его вызовом. Если метод не существует, метод validate() добавляет запись в словарь ошибок.