[ Using python decorator functions from a different module ]
I want to use a function from another module as a decorator, but I need it to manipulate the current module's global namespace.
For example, I want to be able to go from this:
class SomeClass:
pass
root = SomeClass
to this:
from othermodule import decorator
@decorator
class Someclass:
pass
Any ideas?
Answer 1
That already works:
from othermodule import decorator
@decorator
class Someclass:
pass
Just put in othermodule.py
:
def decorator(cls):
#.... do something with cls
return cls
Answer 2
Having a decorator modify the global namespace if any module, let alone another module, is bad and never necessary. Code that mutates far-away globals is difficult to read and maintain. You should definitely consider modifying your design to avoid mutable global state and especially implicit assignment.
Answer 3
This is a bit hacky, but try this in othermodule.py
:
import sys
def decorator(cls):
mod = __import__(cls.__module__)
mod.root = cls