How do I overload 'equals'?

Equis Uno ir4u4 at yahoo.com
Mon Feb 2 21:01:06 EST 2004


Diez,

your info about the 'multimethod-dispatch House Assigner' is kewl.
It's not what I'm currently looking for but I may in the future.

I have no use case.

My motivation is to learn about the limitations and capability of Python.

We could call it a useless case.

I suspect that building an operator with un-obvious side effects
is bad programming style.

It's better to just use a simple function to do the assignment:
aHouse = superAssign (myHouse)

If I want to know what superAssign() does, I go read it.

I'd still like to build an arbitrary operator though.

-moi


"Diez B. Roggisch" <deets_noospaam at web.de> wrote in message news:<bvmanb$2o7$05$1 at news.t-online.com>...
> > aHouse = makeAhouse()
> > aHouse superAssign myHouse # use the superAssign operator
> > 
> > to fill aHouse with all the objects inside myHouse
> > and then call an arbitray method:
> > myHouse.log('aHouse has a copy of your stuff')
> > 
> > Is this possible?
> 
> First of all, write the operator as simple function with two arguments, your
> aHouse and myHouse:
> 
> def init_house(aHouse, myHouse):
>   aHouse.inhabitants = myHouse.inhabintants
>   ....
> 
> Now if you actually have different functions, depending on the actual types
> you use, you could go for multimethod-dispatch and create a HouseAssigner
> like this:
> 
> class HouseAssigner(multimethods.Dispatch):
>     def __init__(self):
>         multimethods.Dispatch.__init__(_)
>         _.add_rule((AHouse, MyHouse), _.init_house)
> 
> I assumed that aHouse is of tpye AHouse, and myHouse of MyHouse
> 
> Now you can create an instance of HouseAssigner and use that to perform the
> actual assignment:
> 
> ha = HousAssigner()
> ha(aHouse, myHouse)
> 
> Now for the operator-stuff: My c++-skills are somewhat rusted (something I'm
> not sure if to be glad of or not), so I don't remember how to exactly
> declare a custom assignment-operator. 
> 
> However, I think that you are after a thing here that I personally would
> consider as bad style: Usually, polymorphism is used to write code that is
> not interested in details of some actual object, but works on abstract
> concepts. An example would be a ParkController working on Car-objects, but
> you feed it with Porsche, Mercedes and BMW-objects (which inherit from Car,
> of course). Still the actual car knows about its unique features.
> 
> Introducing an assignment operator like you want it to have now acutally
> performs willingly a slicing-operation - the object forgots something about
> what its capable/consisting of. I don't see any reason for that - it might
> even lead to severe problems, as accidential slicing in c++ does.
> 
> So - maybe you could fill in what actual use-case you have for such a
> behaviour.
> 
> Another thing to mention might be that assignment in python is different
> from assignment in C/C++: 
> 
> c = Car()
> 
> only means that the identifier c now points to an instance of Car - not that
> c is of type car. So in the next line, you could say:
> 
> c = 10
> 
> Others have explained that behaviour better, you might find informations in
> the documentation.
> 
> Regards,
> 
> Diez



More information about the Python-list mailing list