Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #84526

Re: Delegation in Python

From Mark Lawrence <breamoreboy@yahoo.co.uk>
Subject Re: Delegation in Python
Date 2015-01-24 23:59 +0000
References <FeCdnXdsTpunvlnJnZ2dnUVZ8judnZ2d@brightview.co.uk> <CAPTjJmoVxi_VXKJ93W=rPNnZiud6O_mXyxm+2tMG8BoQBqH-Ew@mail.gmail.com> <54C42D9D.7010305@digipen.edu>
Newsgroups comp.lang.python
Message-ID <mailman.18113.1422144008.18130.python-list@python.org> (permalink)

Show all headers | View raw


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 <noone@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

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Delegation in Python Brian Gladman <noone@nowhere.net> - 2015-01-24 22:57 +0000
  Re: Delegation in Python Chris Angelico <rosuav@gmail.com> - 2015-01-25 10:22 +1100
    Re: Delegation in Python Brian Gladman <noone@nowhere.net> - 2015-01-24 23:38 +0000
      Re: Delegation in Python Chris Angelico <rosuav@gmail.com> - 2015-01-25 10:43 +1100
        Re: Delegation in Python Brian Gladman <noone@nowhere.net> - 2015-01-25 00:18 +0000
          Re: Delegation in Python Chris Angelico <rosuav@gmail.com> - 2015-01-25 11:28 +1100
            Re: Delegation in Python Brian Gladman <noone@nowhere.net> - 2015-01-25 07:49 +0000
              Re: Delegation in Python Chris Angelico <rosuav@gmail.com> - 2015-01-25 19:07 +1100
      Re: Delegation in Python Gary Herron <gherron@digipen.edu> - 2015-01-24 15:47 -0800
        Re: Delegation in Python Brian Gladman <noone@nowhere.net> - 2015-01-24 23:58 +0000
  Re: Delegation in Python Gary Herron <gherron@digipen.edu> - 2015-01-24 15:41 -0800
    Re: Delegation in Python Brian Gladman <noone@nowhere.net> - 2015-01-24 23:52 +0000
  Re: Delegation in Python Mark Lawrence <breamoreboy@yahoo.co.uk> - 2015-01-24 23:59 +0000
  Re: Delegation in Python Chris Angelico <rosuav@gmail.com> - 2015-01-25 11:07 +1100
  Re: Delegation in Python Terry Reedy <tjreedy@udel.edu> - 2015-01-24 20:31 -0500
    Re: Delegation in Python Brian Gladman <noone@nowhere.net> - 2015-01-25 07:43 +0000

csiph-web