Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #49325

Re: class factory question

Date 2013-06-27 09:48 -0400
From Dave Angel <davea@davea.name>
Subject Re: class factory question
References <138ce5a8-1b4c-49d4-8005-d5f4642dcb97@googlegroups.com> <mailman.3928.1372339429.3114.python-list@python.org> <63f9338f-5809-4101-8d11-d0f8266f5818@googlegroups.com>
Newsgroups comp.lang.python
Message-ID <mailman.3929.1372340928.3114.python-list@python.org> (permalink)

Show all headers | View raw


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

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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