Steve D'Aprano wrote,on March 16, 2017 5:07 AM > > On Thu, 16 Mar 2017 09:03 am, Gregory Ewing wrote: > > > Steve D'Aprano wrote: > >> You probably can't make a whale fly just by changing the class to > >> bird. It will need wings, and feathers, at the very least. > > > > Some things succeed in flying with neither wings nor feathers. > > Helicopters, for example. > > For some definition of "no wings". > > But regardless of rockets, balloons, helicopters, Boeing 747s > and Dr Strange's mystical Cloak Of Levitation, *birds* > require wings and feathers to fly. If you just paint "BIRD" > on the side of a whale, it won't get off the ground, and if > you do manage to get it airborne (via a catapult, > perhaps) it will just come down with a rather large splat. > > The point is that dynamically swapping the class of an > existing instance at runtime is *not* just a way of doing > duck-typing. It really does matter if your duck flies by > flapping feathered wings or by blasting an exhaust of hot > gasses out of its rear end at high speed. > > With duck-typing, you don't care whether you have a duck or a > goose, so long as they both can fly: you don't care *how* it > flies, so long as it does, and even a rocket-propelled > balloon will be fine. > > But when you dynamically swap out __class__ (I think > Objective-C "swizzling" is conceptually equivalent, so I'll > call it by that word) you have to care about the > implementation. The whole point of swizzling is that it > allows you to swap out one implementation ("run forward and > flap your wings") with another implementation ("light the > blue touch paper"). But if you do that, you have to care > about implementation details. There's no point in setting > your swizzled fly() method to that of Rocket if your instance > doesn't have blue touch paper to light. > > With duck-typing, making the methods work isn't your > responsibility. But when you swizzle, you are responsible for > making sure that the instance provides whatever the methods > need to work. > > A very old but good example of Python swizzling is here: > http://code.activestate.com/recipes/68429-ring-buffer/
-- Steve "Cheer up," they said, "things could be worse." So I cheered up, and sure enough, things got worse. Condolences, Steve. Nobody on this thread wants to plumb the depths of Python swizzling. Or anything else Python, so it appears. -- https://mail.python.org/mailman/listinfo/python-list