必须输入.__ new__和type .__ init__才能传递相同的参数?

时间:2017-04-06 21:03:01

标签: python

我正在编写元类并覆盖__new____init__以具有(相同的)自定义参数。当我从重写的方法中调用它们时,我必须将完全相同的参数传递给type.__new__type.__init__吗?

如果没有必要,那将是有用的,因为我反过来继承我的元类以进一步专门化它。在这些子类中,我正在使用__init__方法完成大部分工作。如果我必须将相同的参数传递给type.__new__type.__init__,我必须覆盖所有子类中的__new__

1 个答案:

答案 0 :(得分:0)

Python文档object.__new__接收最终传递给__init__的参数。因此,如果 Python 正在调用您的__new__,那就是您将要获得的内容。 (当然,第一个参数除外,它将是__new__调用中的类和__init__调用中的实例。)

检查新结果。如果它是类的实例,则调用__init__

在我看来,如果__new__根据参数分配数据,那么如果给出错误的参数,它将分配错误的数据。

所以我想说,除非你知道你的参数不会影响对象的创建,否则你应该遵循特定的用例,你应该遵循协议。