On 24/01/2015 23:41, Gary Herron wrote:
On 01/24/2015 03:22 PM, Chris Angelico wrote:
On Sun, Jan 25, 2015 at 9:57 AM, Brian Gladman <no...@nowhere.net> wrote:
But I am not clear on how to delegate from my new class to the existing
Fraction class.  This is what I have:

--------------------------
class RF(Fraction):

   def __new__(self, x, y):
     super().__new__(self, x, y)

   def is_integer(self):
     return self.numerator % self.denominator == 0

   def __getattr__(self, attr):
     return getattr(self, attr)
If you just drop everything but your new method, it should work just
fine.

class RF(Fraction):
     def is_integer(self):
        return self.numerator % self.denominator == 0

However, this doesn't ensure that operations on RFs will return more
RFs - they'll often return Fractions instead. There's no easy fix for
that, sorry.

ChrisA

You can always "monkey-path" the Fraction class on the fly to add a new
method to it.  I think most would consider this a bad idea, but it does
work.
Try this:

 >>> from fractions import Fraction
 >>> def is_integer(self):
...     return self.numerator % self.denominator == 0
...
 >>> Fraction.is_integer = is_integer # Monkey-patch Fraction
 >>>
 >>> Fraction(1,2).is_integer()
False
 >>> Fraction(2,1).is_integer()
True


Gary Herron


As regards this being a bad idea I'd suggest the latest score is Practicality 1 Purity 0 :)

--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to