<div dir="auto">Classes Provide already some features of a namespace :<div dir="auto"><br></div><div dir="auto">class cool_namespace:</div><div dir="auto">    A = 8</div><div dir="auto"><br></div><div dir="auto">    @staticmethod</div><div dir="auto">    def f():</div><div dir="auto">        return "yo"</div><div dir="auto">    </div><div dir="auto">    @staticmethod</div><div dir="auto">    def g():</div><div dir="auto">        return (1 + cool_namespace.A) * cool_namespace.f()</div><div dir="auto"><br></div><div dir="auto">And if you're tired of writing @staticmethod, you can write a class decorator "namespace" :</div><div dir="auto"><br></div><div dir="auto">@namespace</div><div dir="auto"><div dir="auto" style="font-family:sans-serif">class cool_namespace:</div><div dir="auto" style="font-family:sans-serif">    A = 8</div><div dir="auto" style="font-family:sans-serif"><br></div><div dir="auto" style="font-family:sans-serif">    def f():</div><div dir="auto" style="font-family:sans-serif">        return "yo"</div><div dir="auto" style="font-family:sans-serif">   </div><div dir="auto" style="font-family:sans-serif">    def g():</div><div dir="auto" style="font-family:sans-serif">        return (1 + cool_namespace.A) * cool_namespace.f()</div></div><div dir="auto"><br></div><div dir="auto">And I think this decorator already exists somewhere.</div><br><div class="gmail_quote" dir="auto"><div dir="ltr">Le sam. 9 juin 2018 à 10:21, Steven D'Aprano <<a href="mailto:steve@pearwood.info" target="_blank" rel="noreferrer">steve@pearwood.info</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, Jun 08, 2018 at 03:07:28PM -0700, Michael Selik wrote:<br>
<br>
> You can use ``eval`` to run an expression, swapping in a different globals<br>
> and/or locals namespace. Will this serve your purpose?<br>
> <br>
> In [1]: import types<br>
> In [2]: ns = types.SimpleNamespace(a=1)<br>
> In [3]: eval('a', ns.__dict__)<br>
> Out[3]: 1<br>
<br>
The public API for getting an object namespace is vars(ns).<br>
<br>
But why would we write eval('a', vars(ns)) instead of getattr(ns, 'a') <br>
or even better just ns.a? Is your Python code too fast and you need to <br>
slow it down? *wink*<br>
<br>
eval and exec are useful when the code you want to run needs to be <br>
constructed at runtime. Its not generally useful when you know what you <br>
want ahead of time as in your example above.<br>
<br>
<br>
<br>
-- <br>
Steve<br>
_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" rel="noreferrer noreferrer" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer noreferrer noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer noreferrer noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div></div>