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

Reply via email to