У меня есть класс Python, который инициализируется с помощью словаря настроек, например:
def __init__(self, settings):
self._settings = settings
Словарь настроек содержит 50-100 различных параметров, которые довольно часто используются в других методах:
def MakeTea(self):
tea = Tea()
if self._settings['use_sugar']:
tea.sugar_spoons = self._settings['spoons_of_sugar']
return tea
Что я хочу знать, так это то, имеет ли смысл предварительно загружать все параметры в атрибуты экземпляра следующим образом:
def __init__(self, settings):
self._use_sugar = settings['use_sugar']
self._spoons_of_sugar = settings['spoons_of_sugar']
и используйте эти атрибуты вместо поиска значений словаря каждый раз, когда они мне нужны:
def MakeTea(self):
tea = Tea()
if self._use_sugar:
tea.sugar_spoons = _self._spoons_of_sugar
return tea
Теперь я довольно новичок в Python, и я работал в основном с компилируемыми языками, где он действительно прост: доступ к полям экземпляра будет намного быстрее, чем поиск значений из любой структуры на основе хеш-таблиц. Однако с интерпретацией Python и прочим я не уверен, что получу какой-либо значительный прирост производительности, потому что на данный момент я почти не знаю, как работает интерпретатор Python. Насколько я знаю, использование имени атрибута в коде может включать использование некоторых внутренних словарей идентификаторов в интерпретируемой среде, поэтому я ничего не получаю.
Итак, вопрос: есть ли существенные преимущества в производительности при извлечении значений из словаря и размещении их в атрибутах экземпляра? Есть ли другие преимущества или недостатки в этом? Что такое хорошая практика?
Я твердо верю, что это инженерное решение, а не преждевременная оптимизация. Кроме того, мне просто любопытно и я пытаюсь написать приличный код на Python, поэтому мне кажется, что вопрос в силе, действительно ли мне нужны эти миллисекунды или нет.