python魔法方法__init__和__new__的区别

Python 魔法方法 __init____new__ 的区别

python魔法方法__init__和__new__的区别

简介

在 Python 中,魔法方法是一种特殊方法,它们以双下划线 (__) 开头和结尾。这些方法负责处理特定任务,例如创建对象、比较对象、获取对象的表示形式等等。

其中两个最常用的魔法方法是 __init____new__。这两个方法都与对象创建过程有关,但它们的作用截然不同。

__new__

__new__ 是一个类级方法,它负责创建对象。每当使用 new 运算符创建新对象时,都会调用 __new__ 方法。

__new__ 方法接受类本身和任何传递给 new 运算符的参数作为参数。它返回一个新创建的对象。如果 __new__ 方法返回 None,则不会创建对象,并且会引发 TypeError 异常。

__init__

__init__ 是一个实例化方法,它负责初始化新创建的对象。__init__ 方法在 __new__ 方法之后调用,并且只接受新创建的对象作为参数。

__init__ 方法可以用来设置对象属性、执行其他初始化任务,或执行任何其他必要的代码。

区别

__new____init__ 之间的主要区别在于:

  • __new__ 是一个类级方法,而 __init__ 是一个实例化方法。
  • __new__ 负责创建对象,而 __init__ 负责初始化对象。
  • __new__ 接受类本身和 new 运算符的参数作为参数,而 __init__ 仅接受新创建的对象作为参数。

示例

下面的示例演示了 __new____init__ 的使用:

“`python
class MyClass:
def new(cls, args, *kwargs):
print(“new called”)
return super().new(cls, args, *kwargs)

def __init__(self, *args, **kwargs):
    print("__init__ called")
    self.args = args
    self.kwargs = kwargs

my_object = MyClass(1, 2, 3, foo=”bar”)
“`

输出:


__new__ called
__init__ called

用法建议

一般来说,不建议直接重写 __new__ 方法。它只应在需要创建自定义对象分配或初始化过程时才重写。

然而,__init__ 是用于初始化新创建对象时推荐的方法。它应该用于设置对象属性、执行初始化任务或执行任何其他必要的代码。

常见问答

  1. __new____init__ 的调用顺序是什么?
    __new____init__ 之前调用。

  2. __new____init__ 可以返回什么值?
    __new__ 返回一个新创建的对象,或 None__init__ 没有返回值。

  3. 我应该在何时重写 __new____init__ 方法?
    重写 __new__ 仅在需要自定义对象分配或初始化过程时。重写 __init__ 用来初始化新创建对象。

  4. __new____init__ 是否可以同时重写?
    是的,可以同时重写 __new____init__ 方法。

  5. 如果 __new__ 方法返回 None 会发生什么?
    如果 __new__ 方法返回 None,则不会创建对象,并且会引发 TypeError 异常。

原创文章,作者:冯明梓,如若转载,请注明出处:https://www.wanglitou.cn/article_110147.html

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2024-07-14 12:46
下一篇 2024-07-14 12:48

相关推荐

公众号