@@ -104,7 +104,12 @@ def __new__(cls, numerator=0, denominator=None, _normalize=True):
104104 self = super (Fraction , cls ).__new__ (cls )
105105
106106 if denominator is None :
107- if isinstance (numerator , numbers .Rational ):
107+ if type (numerator ) is int :
108+ self ._numerator = numerator
109+ self ._denominator = 1
110+ return self
111+
112+ elif isinstance (numerator , numbers .Rational ):
108113 self ._numerator = numerator .numerator
109114 self ._denominator = numerator .denominator
110115 return self
@@ -153,6 +158,9 @@ def __new__(cls, numerator=0, denominator=None, _normalize=True):
153158 raise TypeError ("argument should be a string "
154159 "or a Rational instance" )
155160
161+ elif type (numerator ) is int is type (denominator ):
162+ pass # *very* normal case
163+
156164 elif (isinstance (numerator , numbers .Rational ) and
157165 isinstance (denominator , numbers .Rational )):
158166 numerator , denominator = (
@@ -399,17 +407,17 @@ def reverse(b, a):
399407
400408 def _add (a , b ):
401409 """a + b"""
402- return Fraction ( a . numerator * b .denominator +
403- b .numerator * a . denominator ,
404- a . denominator * b . denominator )
410+ da , db = a . denominator , b .denominator
411+ return Fraction ( a . numerator * db + b .numerator * da ,
412+ da * db )
405413
406414 __add__ , __radd__ = _operator_fallbacks (_add , operator .add )
407415
408416 def _sub (a , b ):
409417 """a - b"""
410- return Fraction ( a . numerator * b .denominator -
411- b .numerator * a . denominator ,
412- a . denominator * b . denominator )
418+ da , db = a . denominator , b .denominator
419+ return Fraction ( a . numerator * db - b .numerator * da ,
420+ da * db )
413421
414422 __sub__ , __rsub__ = _operator_fallbacks (_sub , operator .sub )
415423
@@ -561,6 +569,8 @@ def __hash__(self):
561569
562570 def __eq__ (a , b ):
563571 """a == b"""
572+ if type (b ) is int :
573+ return a ._numerator == b and a ._denominator == 1
564574 if isinstance (b , numbers .Rational ):
565575 return (a ._numerator == b .numerator and
566576 a ._denominator == b .denominator )
0 commit comments