我很难理解这里发生的事情,因为我认为这是有效的。
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__
是一个单独的函数,它使用其第二个参数来提供值。