我无法理解这里发生的事情,因为我认为这是可行的。
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/