hasattr()

Функция hasattr() возвращает True, если у объекта есть атрибут с указанным именем, и False — если обращение к нему вызвало бы AttributeError. Часто используется перед чтением или вызовом, чтобы безопасно работать с объектами разной природы.

Сигнатура

hasattr(object, name)

Параметры:

  • object — проверяемый объект.

  • name — имя атрибута (строка).

Возвращает: True или False.

Примеры

Базовая проверка:

class Device:
    voltage = 5

d = Device()
print(hasattr(d, "voltage"))
print(hasattr(d, "current"))
True
False

Безопасный вызов метода:

class Logger:
    def log(self, msg):
        print("[log]", msg)

obj = Logger()
if hasattr(obj, "log"):
    obj.log("started")
[log] started

Совместно с getattr() для значения по умолчанию:

class Config:
    host = "localhost"

cfg = Config()
port = cfg.port if hasattr(cfg, "port") else 8080
print(port)
8080

Проверка наличия dunder-метода:

data = [1, 2, 3]
print(hasattr(data, "__iter__"))
print(hasattr(42, "__iter__"))
True
False

Поддержка протокола чтения у пользовательского класса:

class Stream:
    def read(self):
        return "data"

class Plain:
    pass

for obj in (Stream(), Plain()):
    if hasattr(obj, "read"):
        print(obj.read())
    else:
        print("no read")
data
no read

См. также

Примечание

Описание основано на официальной документации Python (docs.python.org), распространяемой под лицензией PSF License v2. © Python Software Foundation.