我无法理解这里发生的事情,因为我认为这是可行的。

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而不是我的“ testing”字符串。但是,当我随后检查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__是一个单独的函数,它使用其第二个参数提供值。

关于python - 在__new__中更改arg不会继承__init__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27434855/

10-15 12:01