Как мне вызвать setattr () для текущего модуля?

127
задан Matt Joiner 29 May 2010 в 02:07
поделиться

3 ответа

import sys

thismodule = sys.modules[__name__]

setattr(thismodule, name, value)

или без использования setattr (который разбивает букву вопроса, но удовлетворяет тем же практическим целям; -):

globals()[name] = value

Примечание : в области видимости модуля последнее эквивалентно:

vars()[name] = value

, что немного более кратко, но не работает изнутри функции ( vars () дает переменные области видимости, в которой он вызывается: переменные модуля при вызове в глобальной области видимости, и затем можно использовать его R / W, но переменные функции при вызове в функции, а затем его следует рассматривать как R / O - онлайн-документы Python могут немного запутать это конкретное различие).

199
ответ дан 24 November 2019 в 00:46
поделиться

Если вы должны устанавливать переменные, привязанные к модулю, изнутри модуля, то чем плох global?

# my_module.py

def define_module_scoped_variables():
    global a, b, c
    a, b, c = 'a', ['b'], 3

Таким образом:

>>> import my_module
>>> my_module.define_module_scoped_variables()
>>> a
NameError: name 'a' is not defined
>>> my_module.a
'a'
>>> my_module.b
['b']
6
ответ дан 24 November 2019 в 00:46
поделиться
  1. Вы бы не сделали. Вы бы сделали globals()["SOME_CONSTANT"] = 42
  2. Вы бы не сделали. Вы бы хранили динамически генерируемый контент где-то еще, кроме модуля.
-1
ответ дан 24 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: