gh-121797: Add class method Fraction.from_number() by serhiy-storchaka · Pull Request #121800 · python/cpython (original) (raw)
I meant some helper:
@classmethod def _from_number(cls, number): if type(number) is int: return cls._from_coprime_ints(number, 1) elif isinstance(number, numbers.Rational): return cls._from_coprime_ints(number.numerator, number.denominator) elif (isinstance(number, float) or (not isinstance(number, type) and hasattr(number, 'as_integer_ratio'))): return cls._from_coprime_ints(*number.as_integer_ratio())
Then you can reuse one in the constructor and in the from_number()
, e.g.:
if denominator is None:
self = cls._from_number(numerator)
if self is not None:
return self
elif isinstance(numerator, str):
...
There is also a matter of performance.
I don't expect too much from extra class method call.