Re: Assigning to self.__class__
"Paul McGuire" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] >I have some places in pyparsing where I've found that the most > straightforward way to adjust an instance's behavior is to change its > class. > I do this by assigning to self.__class__, and things all work fine. > > (Converting to use of __new__ is not an option - in one case, the change > is > temporary, and before the end of the function, I change it back again.) > > Any comments on this practice? Is this intended capability for Python > objects, or am I taking advantage of a fortuitous accident, which may get > undone at a future time? Very little if any of the new class stuff is accidental. As I remember, .__class__ was originally read-only and was intentionally changed when practical use cases for rewriting it were developed and presented with a request for change. Though I could be wrong, I would comfortably use this feature myself. Terry J. Reedy -- http://mail.python.org/mailman/listinfo/python-list
Re: Assigning to self.__class__
Heiko Wundram <[EMAIL PROTECTED]> wrote: > bruno at modulix wrote: > > Paul McGuire wrote: > >> or am I taking advantage of a fortuitous accident, which may get > >> undone at a future time? > > > > It's certainly not a fortuitous accident. > > And even the (printed) cookbook has examples which assign to > self.__class__... I guess this means this feature isn't going to go away Hmmm, I'm the main decision-maker for what goes in the printed cookbook, but it's Guido who decides what stays or goes in the language, and it's not as if we always agree (though I will admit that when we disagree it later usually turns out he's right, but that's another issue;-). Still, in this case I don't think we disagree!-) Alex -- http://mail.python.org/mailman/listinfo/python-list
Re: Assigning to self.__class__
bruno at modulix wrote: > Paul McGuire wrote: >> or am I taking advantage of a fortuitous accident, which may get >> undone at a future time? > > It's certainly not a fortuitous accident. And even the (printed) cookbook has examples which assign to self.__class__... I guess this means this feature isn't going to go away soo. ;-) --- Heiko. -- http://mail.python.org/mailman/listinfo/python-list
Re: Assigning to self.__class__
Paul McGuire wrote: > I have some places in pyparsing where I've found that the most > straightforward way to adjust an instance's behavior is to change its class. Hooray ! You've just (re)discovered the state pattern... for which the most stupid simple implementation in Python is to : >(snip) assigning to self.__class__, (snip) !-) > > Any comments on this practice? It can be very confusing for newbies and peoples having no experience with *dynamic* languages, and I guess control-freaks and static-typing-addicts would runaway screaming. But I like it anyway !-) > Is this intended capability for Python > objects, AFAIK, yes. > or am I taking advantage of a fortuitous accident, which may get > undone at a future time? It's certainly not a fortuitous accident. -- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in '[EMAIL PROTECTED]'.split('@')])" -- http://mail.python.org/mailman/listinfo/python-list
Assigning to self.__class__
I have some places in pyparsing where I've found that the most straightforward way to adjust an instance's behavior is to change its class. I do this by assigning to self.__class__, and things all work fine. (Converting to use of __new__ is not an option - in one case, the change is temporary, and before the end of the function, I change it back again.) Any comments on this practice? Is this intended capability for Python objects, or am I taking advantage of a fortuitous accident, which may get undone at a future time? -- Paul -- http://mail.python.org/mailman/listinfo/python-list