URN Logo
UNIX Resources » Linux » China Linux Forum » Python 编 程 » 19 » [精华] __new__的使用
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
[精华] __new__的使用
Author: rings    Posted: 2004-04-21 18:33    Length: 1,948 byte(s)
[Original] [Print] [Top]
__new__

__new__是python里object的方法。如果你要重载__new__,那么你需要继承object。
__new__是类方法。他不带self参数。 __new__和__init__是不一样的。__init__带
self参数。所以他是在对象已经被构造好了以后被调用的。而如果你要在对象构造的时候
做一些事情,那么就需要使用__new__。__new__的返回值必须是对象的实例。 __new__一般在
一些模式里非常有用。我们看一个例子。 这个例子是《thinking in python》里的一个Singleton例子

class OnlyOne(object):
class __OnlyOne:
def __init__(self):
self.val = None
def __str__(self):
return ′self′ + self.val
instance = None
def __new__(cls): # __new__ always a classmethod
if not OnlyOne.instance:
OnlyOne.instance = OnlyOne.__OnlyOne()
return OnlyOne.instance
def __getattr__(self, name):
return getattr(self.instance, name)
def __setattr__(self, name):
return setattr(self.instance, name)

x = OnlyOne()
x.val = 'sausage'
print x
y = OnlyOne()
y.val = 'eggs'
print y
z = OnlyOne()
z.val = 'spam'
print z
print x
print y

我们可以看到OnlyOne从object继承而来。 如果你不继承object,那么你的
__new__就不会在构造的时候来调用。
当x = OnlyOne()的时候,其实就是调用__new__(OnlyOne),每次实例化OnlyOne
的时候都会调用。因为他是类方法。 所以这段代码就是利用这个特性来实现Singleton的。
因为不管构造多少对象,都要调用__new__. 那么在OnlyOne里保持一个类的属性, instance.
他代表嵌套的_OnlyOne的实例。 所以,对于他,我们只构造一次。 以后每次构造的时候都是
直接返回这个实例的。所以,在这里, x,y,z 都是同一个实例。这个方法和典型的用C++ 来实现
Singleton的道理是一样的。


[Original] [Print] [Top]
« Previous thread
从那儿可以下到python的unix安装包
Python 编 程
19
Next thread »
探讨Plone
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 04:11:40, cost 0.042953968048096 ms.