Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #49264
| References | <138ce5a8-1b4c-49d4-8005-d5f4642dcb97@googlegroups.com> <mailman.3890.1372253972.3114.python-list@python.org> <5d6aa501-58f6-4d8f-8bf5-53d95ff9264e@googlegroups.com> <kqeusq$4h8$1@ger.gmane.org> |
|---|---|
| From | Joshua Landau <joshua.landau.ws@gmail.com> |
| Date | 2013-06-26 16:17 +0100 |
| Subject | Re: class factory question |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.3893.1372259876.3114.python-list@python.org> (permalink) |
On 26 June 2013 15:46, Peter Otten <__peter__@web.de> wrote:
> The clean way to
> cope with the situation is to use a dict:
>
> classnames = ["Vspace", ...]
> classes = {name: type(name, ...) for name in classnames}
>
> Then you can access the Vspace class with
>
> classes["Vspace"]
>
> If that is inconvenient for your usecase you can alternatively update the
> global (module) namespace:
>
> globals().update((name, type(name, ...) for name in classnames)
>
> For example:
>
>>>> class A(object): pass
> ...
>>>> globals().update((n, type(n, (A,), {})) for n in ["Beta", "Gamma"])
>>>> Beta
> <class '__main__.Beta'>
>>>> issubclass(Beta, A)
> True
I would say if a dict isn't good, there are still some cases where you
might not want to use globals.
I _might_ do:
import sys
from types import ModuleType
# As before
newclasses = ['Vspace', 'Boldpath', "and so on", "and yes, these all
become variables"]
little_classes = {name: type(name, (int,), {}) for name in newclasses}
# Make a module
module_for_little_classes = ModuleType("module_for_little_classes",
"All the things")
module_for_little_classes.__dict__.update(little_classes)
# Hack it in there!
sys.modules["module_for_little_classes"] = module_for_little_classes
# Now we can undo all
import module_for_little_classes as mlc
mlc.Vspace
mlc.Boldpath
...
# And undo all our hard work avoiding globals():
from module_for_little_classes import *
Vspace
Boldpath
So, why avoid globals()?
1) Linters don't like globals()
2) Urm... it's ugly?
3) Ur.......
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
class factory question Tim <jtim.arnold@gmail.com> - 2013-06-26 06:09 -0700
Re: class factory question Peter Otten <__peter__@web.de> - 2013-06-26 15:39 +0200
Re: class factory question Tim <jtim.arnold@gmail.com> - 2013-06-26 07:08 -0700
Re: class factory question Peter Otten <__peter__@web.de> - 2013-06-26 16:46 +0200
Re: class factory question Tim <jtim.arnold@gmail.com> - 2013-06-26 08:05 -0700
Re: class factory question Joshua Landau <joshua.landau.ws@gmail.com> - 2013-06-26 16:17 +0100
Re: class factory question Peter Otten <__peter__@web.de> - 2013-06-26 17:40 +0200
Re: class factory question Joshua Landau <joshua.landau.ws@gmail.com> - 2013-06-27 00:20 +0100
Re: class factory question Fábio Santos <fabiosantosart@gmail.com> - 2013-06-27 00:35 +0100
Re: class factory question Joshua Landau <joshua.landau.ws@gmail.com> - 2013-06-27 14:16 +0100
Re: class factory question Tim <jtim.arnold@gmail.com> - 2013-06-27 06:37 -0700
Re: class factory question Dave Angel <davea@davea.name> - 2013-06-27 09:48 -0400
Re: class factory question Irmen de Jong <irmen.NOSPAM@xs4all.nl> - 2013-06-27 17:56 +0200
Re: class factory question Tim <jtim.arnold@gmail.com> - 2013-06-27 09:40 -0700
csiph-web