首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Python _new_ 、init_ _call_

2013-04-20 
Python__new__ 、__init__、 __call__Contains:__new__: 创建对象时调用,返回当前对象的一个实例__init__:创

Python __new__ 、__init__、 __call__
Contains:
__new__: 创建对象时调用,返回当前对象的一个实例__init__:创建完成对象后调用,对当前对象的实例的一些初始化,无返回值__call__:
一、__init__通过此方法我们可以顶一个对象的初始操作。
但是当我新建一个类的实例的时候,__init__并不是第一个被调用的,实际上,还有一个叫做__new__的方法,来构造这个实例。然后在给开始创建的初始化函数传递参数。


二、__new__   
   

    @staticmethod # known case of __new__    def __new__(cls, *more): # known special case of object.__new__        """ T.__new__(S, ...) -> a new object with type S, a subtype of T """        pass

__new__方法相当不常用,但是它有自己的特性,特别是当继承一个不可变的类型比如一个tuple或者string.
Q:可是什么时候使用__new__?
难道是这个吗?特别是当继承一个不可变的类型比如一个tuple或者string.
class Entity: def __init__(self,x,y): self.x = x self.y = y def __call__(self, x, y): self.x = x self.y = yentity = Entity(2,3)print 'before __call__',(entity.x,entity.y)entity.__call__(4,5)print 'after __call__',(entity.x,entity.y)
result:
before __call__ (2, 3)
after __call__ (4, 5)

参考资料:
http://docs.python.org/2/reference/datamodel.html
http://stackoverflow.com/questions/8106900/new-and-init-in-python
http://stackoverflow.com/questions/674304/pythons-use-of-new-and-init
http://www.wingide.com/psupport/python-manual/2.4/ref/customization.html
http://stackoverflow.com/questions/12971641/need-to-understand-the-flow-of-init-new-and-call?lq=1
http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue6/a-guide-to-pythons-magic-methods.html

热点排行