go-python / gpython

gpython is a python interpreter written in go "batteries not included"
BSD 3-Clause "New" or "Revised" License
870 stars 95 forks source link

How to get `globals()` inside Go bounded method? #211

Open reyoung opened 1 year ago

reyoung commented 1 year ago

Simple description

I cannot find a way to access globals() within a bounded method in GoLang.

I expose a type into module, like moduleImpl.Globals["Foo"] = FooType, and add methods to FooType by FooType.Globals["bar"] = MustNewMethod(..., someGoMethod, ...).

I cannot access module's global variables inside someGoMethod.

Why I need this feature

I just attach different zap.Logger to multiple py.Contexts. I attach logger as a module's global variable, by using

ctx.GetModule("name").Globals["logger"] = &pyLoggerObject{logger}

but I cannot find a way to use this logger inside bounded methods.


I found I can create a py.Type and attach the type to module global dynamically. I can somehow read module globals by this trick. But Is there a elegant way to archive that?

m = ctx.GetModule("module")
m.Globals["Foo"] = NewFooType(m)