Мне говорили, что использовать locals() для динамического создания переменных в Python — дурной тон. Тем не менее, я пишу класс (используя Django и Wagtail), и мне действительно нужно, чтобы эти вещи попадали в класс dict, то есть в локальные переменные оператора class
, а не в отдельную структуру данных:
class BlogPage(Page):
for language in languages:
locals()['body_' + language] = RichTextField(blank=True)
Я не думаю, что смогу установить их после оператора класса с помощью setattr
, потому что к тому времени обработка метакласса Django уже произойдет.
Есть ли способ лучше?
locals()
на самом деле может быть оправдано (и, вероятно, действительно будет работать, в отличие от измененияlocals()
в функции). - person user2357112 supports Monica   schedule 04.11.2017Page
класса BlogPage. Мне не нужно будет изменять эти поля форматированного текста, и на самом деле позже есть процессcontent_panels = Page.content_panels + [ FieldPanel('body_en'),
, где 'body_en' должен соответствовать объявлению RichTextField выше, поэтому, если он находится внутри dict, я не уверен, как это работает - person mheavers   schedule 04.11.2017