__init__和__new__

1 __init__和__new__的区别

  1 当创建一个实例的时候会首先调用__new__, 然后在初始化实例的时候会调用__init__.

  2 __new__是类级别的方法,__init__是个实例方法.

  3 __new__方法会返回一个创建的实例,而__init__不需要有返回值

2 __new__ 实际应用

2.1 在元类中的应用

# 由type创建元类,必须要继承type
class MetaClassFoo(type):

    # 由元类创建类也遵循 名字;继承;方法
    def __new__(cls, name, base, attrs):
        # 天赋,赋予给通过该元类创建的类
        attrs[‘func‘] = lambda self: ‘im %s and i have func!‘ % self.name
        return type.__new__(cls, name, base, attrs)

# 由元类创建类
class Foo(object):

    __metaclass__ = MetaClassFoo

    def __init__(self):
        self.name = ‘www‘

# 由类创建实例,并生成方法
print Foo().func()

2.2 在单例模型中的应用

class SingleObj(object):
    def __new__(cls):
        # 关键在于这,每一次实例化的时候,我们都只会返回这同一个instance对象
        if not hasattr(cls, ‘instance‘):
            cls.instance = super(SingleObj, cls).__new__(cls)  # 使用__new__最好返回super()方法
        return cls

obj1 = SingleObj()
obj2 = SingleObj()

obj1.attr1 = ‘value1‘
print obj1.attr1, obj2.attr1
print obj1 is obj2
# out:
value1 value1
True
时间: 2024-10-16 19:38:16

__init__和__new__的相关文章

Python构造器及析构器:__init__与__new__及__del__

__init__与__new__这两个魔法方法组成了Python类对象的构造器,在Python类实例化时,其实最先调用的不是__init__而是__new__.__new__是负责实例化对象的,而__init__是初始化操作.__del__是析构器,当Python对象的所有引用都不存在了(被del了),就会自动触发__del__执行. class CapStr(str): def __new__(cls, string): #此时string = 'i love you' cls是CapStr这

__init__和__new__解释

__init__ 方法通常用在初始化一个类实例的时候使用,但是他并不是初始化类时第一个被调用的方法,第一个被调动的方法是__new__方法. # -*- coding: utf-8 -*- class Person(object): """Silly Person""" def __init__(self, name, age): self.name = name self.age = age def __str__(self): return

Python中__init__和__new__的区别详解

__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- coding: utf-8 -*- class Person(object): """Silly Person""" def __init__(self, name, age): self.name = name self.age = age def __

Python基础(十) __init__与__new__区别

__init__与__new__区别: __init__在python,其实是,在实例化之后执行的,用来初始化一些属性,相当于构造函数,但是又不一样 细心一些,通过参数会有所发现,其实__init__(self)  self隐式的将,实例传过来. __new__在python中其实是,在实例化之前执行的,这个通过参数一样可以看出 __new__(cls),cls是隐式的传递的类对象,并不是实例.因为__new__的任务就是,创建类实例并返回实例. class temp(object): def

__init__、__new__、__call__ 方法

__init__方法 __init__方法负责对象的初始化,系统执行该方法前,其实该对象已经存在了,要不然初始化什么东西呢?先看例子: # class A(object): python2 必须显示地继承objectclass A:    def __init__(self):        print("__init__ ")        super(A, self).__init__()    def __new__(cls):        print("__new_

Python中的__init__和__new__

一.__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- coding: utf-8 -*- class Person(object): """Silly Person""" def __init__(self, name, age): self.name = name self.age = age def

python中的__init__和__new__的区别

一.__init__ 方法是什么?(init前后的线是双下划线) 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: 1 # -*- coding: utf-8 -*- 2 3 class Person(object): 4 """Silly Person""" 5 6 def __init__(self, name, age): 7 self.na

__init__和__new__的异同

实例化类的流程: 1.p = Person(name, age)2.首先执行使用name和age参数来执行Person类的__new__方法,这个__new__方法会 返回Person类的一个实例(通常情况下是使用 super(Persion, cls).__new__(cls, - -) 这样的方式),3.然后利用这个实例来调用类的__init__方法,上一步里面__new__产生的实例也就是 __init__里面的的 self所以,__init__ 和 __new__ 最主要的区别在于:1.

__init__和__new__,以及self

__new__: 每次实例化类的时候会默认先执行__new__,进行实例化类. 如果想改变默认__new__行为,可以对它进行自定义,必须有返回实例. __init__: 对实例化的类进行初始化,必须有一个参数self. 先调用的__new__进行实例化,然后调用__init__对这个实例进行初始化. self: 指代当前实例化的实例对象本身 self名字不是关键词,可以定义成其他名字,a或者b等都可以,但是约定俗成的用self.