interview
python
Python 的 __init__ 和 __new__ 方法有什么区别

Python 面试题, Python 的 **init** 和 **new** 方法有什么区别?

Python 面试题, Python 的 **init** 和 **new** 方法有什么区别?

QA

Step 1

Q:: Python 的 init 方法和 new 方法有什么区别?

A:: initnew 都是 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 中,类是对象,而元类是用来创建这些对象的类。你可以通过重写元类中的方法来控制类的创建过程。元类最常见的用途是控制类的行为,或者自动注册类,或者在类创建时自动修改类的属性和方法。

🦆
解释一下 Python 中的单例模式 Singleton 并给出实现方法.

单例模式是一种设计模式,它确保一个类只有一个实例,并提供全局访问点。在 Python 中,实现单例模式的方法有多种,比如通过重写 new 方法、使用模块级别的变量、或者使用装饰器。最常见的方法是重写 new 方法来控制实例化过程,保证每次返回的都是同一个实例。

🦆
Python 的对象模型中 __call__ 方法的作用是什么?

call 方法使得一个类的实例可以像函数一样被调用。当你在一个类中定义了 call 方法后,你就可以通过 '实例名()' 的形式来调用该实例,Python 会自动调用实例的 call 方法。它通常用于实现函数对象、回调函数、以及需要保持状态的函数调用。