__new__ and __init__
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Python's use of __new__ and __init__?
号
我想知道如何使用这两种方法。我知道
这是否意味着
如果我不使用相同的参数会发生什么?
对。
你会得到一个错误。
(从技术上讲,对于
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> class Foo(object): ... def __new__(cls, x): ... return super(Foo, cls).__new__(cls) ... ... def __init__(self, x, y): ... pass >>> Foo(1) Traceback (most recent call last): File"<pyshell#260>", line 1, in <module> Foo(1) TypeError: __init__() takes exactly 3 arguments (2 given) >>> Foo(1, 2) Traceback (most recent call last): File"<pyshell#261>", line 1, in <module> Foo(1, 2) TypeError: __new__() takes exactly 2 arguments (3 given) |
这两个方法将(几乎)传递相同的参数集,因此通常它们具有匹配的签名(相同的参数集)。
我之所以说"几乎",是因为
在python中,您可以使用"通配符"参数:
当签名不匹配时会发生什么(考虑到通配符参数)?您得到的结果与将参数传递给签名与传入参数不匹配的任何python可调用文件相同;您得到一个异常。