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.