class factory question

Dave Angel davea at davea.name
Thu Jun 27 09:48:26 EDT 2013


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



More information about the Python-list mailing list