On 06/27/2013 09:37 AM, Tim wrote:
On Thursday, June 27, 2013 9:16:50 AM UTC-4, Joshua Landau wrote:
On 26 June 2013 14:09, Tim wrote:
I am extending a parser and need to create many classes that are all subclassed
from the same object (defined in an external library). When my module is
loaded I need all the classes to be created with a particular name but the
behavior is all the same. Currently I have a bunch of lines like this:
class Vspace(Base.Command): pass
class Boldpath(Base.Command): pass
There are a bunch of lines like that.
Is there a better way? Something like
newclasses = ['Vspace', 'Boldpath', ... ]
for name in newclasses:
tmp = type(name, (Base.Command,) {})
tmp.__name__ = name
Is there a more pythonic way?
I've just realised -- why on earth are you doing this? Surely there's
a better way than having 50 identical classes. :/
The reason is that I'm using a parser that creates a DOM from a LaTeX file. The
plasTeX package (http://plastex.sourceforge.net/) provides the library to
accomplish that. The parser needs to know how to consume some custom-defined
tokens (like \Vspace, \Boldpath, etc). The behavior for these is all the same
so they're subclassed from one base class, but they need to have these
particular names so the parser knows how to consume them when encountered in
the source file. That is, for every custom command the parser encounters, it
looks for a class of that name in order to tokenize it.
I agree that this is an abnormal circumstance and normally I would just
subclass in the normal way. But I think this situation is different enough that
it is okay to break a convention.
thanks for thinking about this.
--Tim
I don't think you broke the convention, that parser did.
--
DaveA
--
http://mail.python.org/mailman/listinfo/python-list