[Tutor] How to introduce OO?
Thu, 06 Dec 2001 08:14:15 -0800
> > Perhaps I asked the wrong question. If all I want is to use
> > Python for a scripting language and some simple programs,
> > is OOP perhaps overkill?
At 02:41 PM 12/6/2001 +0000, firstname.lastname@example.org replied:
I like to introduce Python's OO with operator overriding,
as here's something you can do with objects that you
simply cannot do procedurally.
Suppose I want numbers that, when multiplied together,
return a*b mod n, i.e. the remainder of the product a*b,
after being divided by some modulus n.
self.value = val
self.mod = mod
product = (self.value * other.value) % self.mod
>>> from play import Modno
>>> a = Modno(4,5)
>>> b = Modno(3,5)
>>> c=a*b # a*b returns a Modno, usable right away
>>> c*c*c*c # using c, a Modno, returned by a*b
Of course you can write a modmul procedure that takes
ordinary integers a,b and returns the product mod some
global n. But you don't get to use * (multiplication
symbol) as a binary operator.
I then enhance the above class with __add__ which works
the same way: returns (a + b) mod n. Then add a __pow__
so you can exponentiate c (c**4 instead of c*c*c*c).
Then add __div__... lotsa fun.
More code to ensure val<mod, only integers, a,b have
same mod before multiplying etc. etc. is optional.
None of this is entirely trivial in the sense of "without
application". Learning some modular arithmetic is a
good intro to elementary group and number theory, and
an entre into cryptography. I pursue these topics, with
Python, here: http://www.inetarena.com/~pdx4d/ocn/crypto0.html