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

Reply via email to