我一直在努力理解__new__和元编程.所以我看看官方的python源代码.
http://hg.python.org/cpython/file/2.7/Lib/fractions.py
它们__new__对Fractions 的功能如下:
class Fraction(Rational):
def __new__(cls, numerator=0, denominator=None):
"""Constructs a Fraction. ... """
self = super(Fraction, cls).__new__(cls)
...
if isinstance(numerator, float):
# Exact conversion from float
value = Fraction.from_float(numerator)
self._numerator = value._numerator
self._denominator = value._denominator
return self
@classmethod
def from_float(cls, f):
"""Converts a finite float to a rational number, exactly. ..."""
# ...
return cls(*f.as_integer_ratio())
Run Code Online (Sandbox Code Playgroud)
为什么他们return self,而不是
return Fraction.from_float(numerator)
Run Code Online (Sandbox Code Playgroud)
我以为我明白了,但现在我很困惑.
(编辑)
为了支持子类化,改变它会有什么不同
return cls.from_float(numerator)
Run Code Online (Sandbox Code Playgroud)