python类中的__init__和__new__方法

Python中类:

  Python中在创建类的过程中最先调用的不是__init__方法而是__new__方法,__new__方法是一个静态方法,在创建一个类对象时其实是通过__new__方法首先创建出一个类实例,然后通过__init__方法初始化这个实例对象。

class Dog(object):
    def __init__(self):
        print("----init方法-----")

    def __del__(self):
        print("----del方法-----")

    def __str__(self):
        print("----str方法-----")
        return "对象的描述信息"

    def __new__(cls):#cls此时是Dog指向的那个类对象

        #print(id(cls))

        print("----new方法-----")
        return object.__new__(cls)


#print(id(Dog))

xtq = Dog()

---------------------

上例中代码执行结果是:

               ----new方法-----
               ----init方法-----
               ----del方法-----

由此可以看出当实例化一个类对象时最先调用的就是__new__方法。

__new__方法至少要有一个参数cls,代表要实例化的类,此参数在实例化时由python解释器自动提供。

__new__方法必须要有返回值,返回实例化出来的实例,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例。

__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其他的初始化的动作,__init__不需要返回值。

class Dog(object):
    def __init__(self,name):
        self.name = abs(name)
        print("----init方法-----")
        print(self.name)

    def __del__(self):
        print("----del方法-----")

    def __str__(self):
        print("----str方法-----")
        return "对象的描述信息"

    def __new__(cls,name):#cls此时是Dog指向的那个类对象

        #print(id(cls))

        print("----new方法-----")
        return object.__new__(cls)


#print(id(Dog))

xtq = Dog(15.00)

修改后给类对象添加参数如果类带参数__new__和__init__中也要带上参数。

posted @ 2018-10-09 21:04  HAPPYEVERYD  阅读(1434)  评论(0编辑  收藏  举报