首页 >后端开发 >Python教程 >Python 类实例化中什么时候`__init__()`不遵循`__new__()`?

Python 类实例化中什么时候`__init__()`不遵循`__new__()`?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-14 14:35:15772浏览

When Does `__init__()` Not Follow `__new__()` in Python Class Instantiation?

理解 __new__() 和 __init__() 执行的顺序

Python 的 __new__() 和 __init__() 方法在课堂上起着至关重要的作用实例化。 __new__() 创建类的新实例,而 __init__() 初始化该实例。预期的执行顺序是 __new__() 在 __init__() 之前调用。

但是,特定场景可能会改变此顺序。实现自定义 __new__() 方法时,可以操纵实例创建并返回现有实例而不是创建新实例。此行为用于实现像享元设计模式这样的模式。

在这种情况下,您可能会观察到 __init__() 在 __new__() 之后被调用,即使这是意外的。 __init__() 始终在 __new__() 之后调用,除非自定义 __new__() 返回现有对象。

要解决此问题,请考虑以更传统的方式实现所需的功能,例如使用工厂函数。或者,您可以在自定义 __new__() 方法中包含初始化代码。然而,这种方法可能被认为是“hacky”,不推荐作为最佳实践。

以上是Python 类实例化中什么时候`__init__()`不遵循`__new__()`?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn