Используя Python декоратор функционирует от другого модуля

Я хочу использовать функцию от другого модуля как декоратор, но мне нужен он для управления глобальным пространством имен текущего модуля.

Например, я хочу смочь пойти от этого:

class SomeClass:
    pass

root = SomeClass

к этому:

from othermodule import decorator

@decorator
class Someclass:
    pass

Какие-либо идеи?

7
задан efotinis 19 November 2010 в 21:39
поделиться

3 ответа

Это немного халтурно, но попробуйте это в othermodule.py:

import sys
def decorator(cls):
    mod = __import__(cls.__module__)
    mod.root = cls
1
ответ дан 7 December 2019 в 01:18
поделиться

Наличие декоратора, изменяющего глобальное пространство имен, если любой модуль, не говоря уже о другом модуле, является плохим и никогда необходимо. Код, изменяющий удаленные глобальные объекты, трудно читать и поддерживать. Вам обязательно стоит подумать об изменении своего дизайна, чтобы избежать изменяемого глобального состояния и особенно неявного присваивания.

4
ответ дан 7 December 2019 в 01:18
поделиться

Это уже работает:

from othermodule import decorator

@decorator
class Someclass:
    pass

Просто поместите в othermodule.py:

def decorator(cls):
    #.... do something with cls
    return cls
5
ответ дан 7 December 2019 в 01:18
поделиться
Другие вопросы по тегам:

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