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.