python __init__和__new__的区别,python中的__new__方法

  python __init__和__new__的区别,python中的__new__方法

  在编程语言中创建一个类,有一个术语如构造方法。然而在Python中,一般认为__init__是一种构造方法,但并不完全相同。在构造类中,有一个特殊的方法__new__,可以等价于构造方法。

  __new__是一个类方法。当我们定义一个类方法时,需要在函数前面标记@classmethod decorator,但是__new__不需要,因为它是经过特殊处理的。要理解__new__方法,我们先来看看什么是类方法。

  类方法

  classMyClass:

  @classmethod

  deftest(cls):

  打印(cls。__name__)

  MyClass.test()

  # Output MyClass在MyClass类中,测试方法是Class方法。它传入的第一个参数是cls,实际上是MyClass类。打印cls__name__查看结果。可以通过类名直接调用该类。方法名称()。通常类方法是另一种构造方法。

  类方法的应用

  fromdatetimeimportdatetime

  datetime.fromtimestamp(324234)

  日期时间。datetime (1970,1,5,2,3,54)如上图所示,内置datetime包中的fromtimestamp是一个类方法,可以用多种方式构造DateTime对象。

  相关:《Python视频教程》

  __new__方法

  def__new__(cls,a):

  Return()。_ _ new _ _ (cls) _ _ new _ _是一个类方法,所以第一个参数也是cls,其余参数都是构造函数中必需的。通常__new__不需要定义,只在元类编程中需要。它可以控制类的生成过程。

  __new__必须返回一个实例,该实例被传入__init__方法中的self参数,即实例变量。这里,返回父类(对象)的__new__方法来创建一个新实例。胜任

  obj=对象。__new__(我的类)

  obj=MyClass()

  #obj是实例,上面两种方式是一样的,其中MyClass是类,obj是实例。

  __init__方法

  __new__是构造方法,那么__init__是初始化函数,负责将变量绑定到实例,更新实例的__dict__字典。第一个参数self是__new__的返回值,它是该类的一个实例。__new__方法在__init__方法之前执行。

  def__init__(self,a):

  self . a=结合使用

  classMyClass:

  def__new__(cls,a):

  returnsuper()。__新__(cls)

  def__init__(self,a):

  self.a=a

  obj=MyClass(3)

  印刷要点

  1.__new__是构造函数,__init__是初始化函数。

  2.__new__通常不需要手动定义。一般用在元类编程中,控制类的生成过程。

  3.__new__先执行,然后__init__绑定实例变量。

  4.__new__必须有一个返回值,它是此类的一个实例。它将由__init__函数接收,通常称为self变量。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: