В python существует эквивалент setdefault () для получения атрибутов объекта?

Значение setdefault для Python позволяет получить значение из словаря, но если ключ не существует, вы назначаете значение по default по default . Затем вы выбираете все, что находится в ключе в словаре.

Без манипуляции с объектом __dict__ Есть ли аналогичная функция для объектов?

например
У меня есть объект foo который может иметь или не иметь bar атрибутов. Как я могу сделать что-то вроде:

 result = setdefaultattr(foo,'bar','bah') 

4 Solutions collect form web for “В python существует эквивалент setdefault () для получения атрибутов объекта?”

У Python нет встроенного устройства, но вы можете определить свой собственный:

 def setdefaultattr(obj, name, value): if not hasattr(obj, name): setattr(obj, name, value) return getattr(obj, name) 

Обратите внимание, что принятый в настоящее время ответ будет, если атрибут уже не существует, вызвал hasattr (), setattr () и getattr (). Это было бы необходимо, только если бы ФП делал что-то вроде переопределения setattr и / или getattr – в этом случае OP не является невиновным enquirer, к которому мы его взяли. В противном случае вызов всех 3 функций важен; при вызове setattr () должно следовать return value чтобы оно не попадало, чтобы return getattr(....)

Согласно документам , hasattr () реализуется путем вызова getattr () и исключения catching. Следующий код может быть быстрее, если атрибут уже существует:

 def setdefaultattr(obj, name, value): try: return getattr(obj, name) except AttributeError: setattr(obj, name, value) return value 
 vars(obj).setdefault(name, value) 

Не делай этого.

Пожалуйста.

Используйте __init__ для предоставления значений по умолчанию. Пожалуйста. Это путинский путь.

 class Foo( object ): def __init__( self ): self.bar = 'bah' 

Это обычный, стандартный, типичный подход. Нет никаких оснований для этого.

  • Невозможно импортировать модули, которые есть
  • Как сериализовать объекты db.Model для json?
  • Одиночная строка или список строк в методе
  • Количество писем на строку
  • Python: когда использовать Threads или Multiprocessing
  • tail -f в python без time.sleep
  • AppEngine Создание моделей ndb json serializable
  • Как создать интернационализированное приложение Google App Engine
  • Как я получаю «InternalError: table» dev ~ guestbook !! Сущности «уже существуют», когда я только что создал хранилище данных?
  • Получить элементы из dict, используя несколько ключей
  • как сравнить один элемент в списке со всеми остальными элементами в этом списке, python
  • Python - лучший язык программирования в мире.