小编Ric*_*ard的帖子

分数模块中__new__

我一直在努力理解__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)

python metaprogramming

5
推荐指数
1
解决办法
113
查看次数

标签 统计

metaprogramming ×1

python ×1