MCPcopy Index your code
hub / github.com/python/cpython / __new__

Method __new__

Lib/fractions.py:206–311  ·  view source on GitHub ↗

Constructs a Rational. Takes a string like '3/2' or '1.5', another Rational instance, a numerator/denominator pair, or a float. Examples -------- >>> Fraction(10, -8) Fraction(-5, 4) >>> Fraction(Fraction(1, 7), 5) Fraction(1, 35)

(cls, numerator=0, denominator=None)

Source from the content-addressed store, hash-verified

204
205 # We're immutable, so use __new__ not __init__
206 def __new__(cls, numerator=0, denominator=None):
207 """Constructs a Rational.
208
209 Takes a string like '3/2' or '1.5', another Rational instance, a
210 numerator/denominator pair, or a float.
211
212 Examples
213 --------
214
215 >>> Fraction(10, -8)
216 Fraction(-5, 4)
217 >>> Fraction(Fraction(1, 7), 5)
218 Fraction(1, 35)
219 >>> Fraction(Fraction(1, 7), Fraction(2, 3))
220 Fraction(3, 14)
221 >>> Fraction('314')
222 Fraction(314, 1)
223 >>> Fraction('-35/4')
224 Fraction(-35, 4)
225 >>> Fraction('3.1415') # conversion from numeric string
226 Fraction(6283, 2000)
227 >>> Fraction('-47e-2') # string may include a decimal exponent
228 Fraction(-47, 100)
229 >>> Fraction(1.47) # direct construction from float (exact conversion)
230 Fraction(6620291452234629, 4503599627370496)
231 >>> Fraction(2.25)
232 Fraction(9, 4)
233 >>> Fraction(Decimal('1.47'))
234 Fraction(147, 100)
235
236 """
237 self = super(Fraction, cls).__new__(cls)
238
239 if denominator is None:
240 if type(numerator) is int:
241 self._numerator = numerator
242 self._denominator = 1
243 return self
244
245 elif (isinstance(numerator, float) or
246 (not isinstance(numerator, type) and
247 hasattr(numerator, 'as_integer_ratio'))):
248 # Exact conversion
249 self._numerator, self._denominator = numerator.as_integer_ratio()
250 return self
251
252 elif isinstance(numerator, str):
253 # Handle construction from strings.
254 m = _RATIONAL_FORMAT.match(numerator)
255 if m is None:
256 raise ValueError('Invalid literal for Fraction: %r' %
257 numerator)
258 numerator = int(m.group('num') or '0')
259 denom = m.group('denom')
260 if denom:
261 denominator = int(denom)
262 else:
263 denominator = 1

Callers 1

_from_coprime_intsMethod · 0.45

Calls 5

superClass · 0.85
as_integer_ratioMethod · 0.45
matchMethod · 0.45
groupMethod · 0.45
replaceMethod · 0.45

Tested by

no test coverage detected