更改 __new__ 中的参数不会延续到__init__



我很难理解这里发生的事情,因为我认为这是有效的。

class Test(object):
    def __new__(cls, arg):
        return object.__new__(cls, 345)
    def __init__(self, arg):
        self.arg = arg
test = Test('testing')
print
print '****', test.arg

这个小例子概述了我遇到的困惑。在新函数中,我正在制作它,以便在创建类时传递一个整数 345 而不是我的"测试"字符串。但是,当我事后检查 arg 时,它仍然是我的"测试"字符串。

同时,Python 文档中的这个示例确实有效:

class inch(float):
    "Convert from inch to meter"
    def __new__(cls, arg=0.0):
        return float.__new__(cls, arg*0.0254)
print inch(12)

有人可以解释一下这里的区别是什么吗?有什么方法可以让我获得我正在寻找的功能吗?

object.__new__接受但忽略除第一个类参数以外的任何参数。这允许您将其他参数添加到子类中的__new__,而不会中断对 super().__new__ 的调用。

float.__new__是一个单独的函数,它使用其第二个参数来提供值。

最新更新