Python 为什么在这三种情况下,object.\uuuuuu new\uuuuuuuuuuuuuu的工作方式不同

Python 为什么在这三种情况下,object.\uuuuuu new\uuuuuuuuuuuuuu的工作方式不同,python,object,types,constructor,Python,Object,Types,Constructor,毫无疑问 作者对为什么不感兴趣,而是对如何感兴趣 我非常想了解原因,特别是: 为什么不是对象。uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 为什么testclass3没有引发错误?因为它不需要任何论据,除了自我 代码 您使用的是较旧的Python版本;此后,错误消息已更新: >>> object.__new__(testclass1, 56) Tra

毫无疑问

作者对为什么不感兴趣,而是对如何感兴趣

我非常想了解原因,特别是:

为什么不是对象。uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

为什么testclass3没有引发错误?因为它不需要任何论据,除了自我

代码


您使用的是较旧的Python版本;此后,错误消息已更新:

>>> object.__new__(testclass1, 56)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object() takes no parameters

唯一的区别是,对于testclass1,对象的默认方法会抱怨定制的特定错误uu init uu。

您是否阅读了python源代码上的注释?他们决定在某些情况下不引发错误,只允许定义uuu init_uuuuuuuuuuuuuuuuuuuuuu或uuuu new_uuuuuuuuuuuuu中的一个。否则,你总是必须重新定义它们,即使它们不是ops。我不明白:我只定义了init,除了self,它不需要任何参数。很明显,我正在将一个参数传递给new,为什么它不会引起错误?
>>> object.__new__(testclass1, 56)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object() takes no parameters
>>> testclass1(56)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object() takes no parameters
>>> testclass3(56)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() takes exactly 1 argument (2 given)