Python 面试题, Python 的 **init** 和 **new** 方法有什么区别?
Python 面试题, Python 的 **init** 和 **new** 方法有什么区别?
QA
Step 1
Q:: Python 的 init 方法和 new 方法有什么区别?
A:: init 和 new 都是 Python 类中用于对象创建和初始化的方法,但它们的作用和调用时机不同。
1.
new 方法:new 是一个静态方法,它在类实例创建时被调用,负责返回一个类的实例对象。new 是在对象创建之前被调用的,第一个参数是 cls,表示当前类。它通常用于控制类的实例化过程,如实现单例模式或返回已经存在的对象实例。
2.
init 方法:init 是实例方法,它在类的实例对象创建之后被调用,负责初始化对象的属性。init 的第一个参数是 self,表示实例本身,init 主要用于设置对象的初始状态,如给对象的属性赋值。
总结来说,new 控制对象的创建过程,而 init 控制对象的初始化过程。
Step 2
Q:: 什么时候应该重写 new 方法?
A:: 通常情况下,你不需要重写 new 方法,除非你需要控制对象的创建过程。例如,在实现单例模式时,new 方法可以用来确保类只创建一个实例。此外,当你使用不变类型(如 int、str 或 tuple)的子类时,也可能需要重写 new 方法,因为这些类型在创建后是不可变的,必须在对象创建时初始化。
用途
面试这个内容的目的是评估候选人对 Python 对象模型的理解,特别是在类的实例化过程中的高级用法。理解 __new__ 和 __init__ 的区别对编写高效、可维护的 Python 代码非常重要。特别是在设计需要控制实例化过程的类(如单例模式、不变对象、或者使用元类的情况)时,会经常用到这些方法。了解它们的用法可以帮助候选人编写更灵活和强大的类定义。\n相关问题
🦆
Python 的元类 metaclass 是什么?它们的作用是什么?▷
🦆
解释一下 Python 中的单例模式 Singleton 并给出实现方法.▷
🦆
Python 的对象模型中 __call__ 方法的作用是什么?▷