python 单例模式的探究
来源:互联网 发布:剑三成女捏脸数据图片 编辑:程序博客网 时间:2024/06/05 18:04
1.__new__
>>> class Singleton(object):def __new__(cls,*args,**kwargs):if '_inst' not in vars(cls):cls._inst=super(Singleton,cls).__new__(cls,*args,**kwargs)return cls._instdef __init__(self,info):self.info=infodef say(self):print self.info>>> s=Singleton('gauss') >>> s.say()gauss #1>>> s=Singleton('gausszh')>>> s.say()gausszh #2 说明初始化赋值的init函数还是有作用的>>> vars(Singleton)dict_proxy({'__module__': '__main__', '__new__': <staticmethod object at 0xa5200d4>, 'say': <function say at 0xb5835534>, '_inst': <__main__.Singleton object at 0xa52502c>, '__dict__': <attribute '__dict__' of 'Singleton' objects>, '__weakref__': <attribute '__weakref__' of 'Singleton' objects>, '__doc__': None, '__init__': <function __init__ at 0xb58354fc>})
>>> s=Singleton('gauss')>>> s.say()gauss>>> s<__main__.Singleton object at 0xa52502c> #3>>> s=Singleton('gausszh')>>> s.say()gausszh>>> s<__main__.Singleton object at 0xa52502c> #4 地址相同,那么是单例模式
2.用装饰器
先在你想要使用单例模式的作用域里定义一个instances={}>>> def singleton(cls):def getinstance(*args,**kwargs):if not instances.has_key(cls):instances[cls]=cls(*args,**kwargs)return instances[cls]return getinstance>>> @singletonclass MyClass():def __init__(self,info):self.info=infodef __call__(self,info):print infoprint self.__class__def say(self):print self.info>>> m=MyClass('gauss')>>> m.say()gauss #5>>> m<__main__.MyClass instance at 0xb5836bcc> #7>>> m('hh')hh__main__.MyClass>>> m=MyClass('gausszh')>>> m.say()gauss #6装饰器在这里直接拦截了我们的类。在我们第二次想要用MyClass类生成一个对象的时候,被装饰器发现,装饰器果断就把这个MyClass第一次生成的对象返回给我们。所以第一次的时候,不论我们在init里干什么都是没有用的。:D>>> m<__main__.MyClass instance at 0xb5836bcc> #8 地址相同>>> m('hh')hh__main__.MyClass
自省函数
id() 返回对象唯一的标识符
repr() 返回对象的标准字符串表达式
type() 返回对象的类型
dir() 返回对象的属性名称列表
vars() 返回一个字典,它包含了对象存储于其__dict__中的属性及值
hasattr() 判断一个对象是否有一个特定的属性
getattr() 取得对象的属性
setattr() 赋值给对象的属性
delattr() 从一个对象中删除属性
callable() 测试对象的可调用性
issubclass() 判断一个类是否为另一个类的子类或孙类
isinstance() 判断一个对象是否是另一个给定类的实例
super() 返回相应的父类
- python 单例模式的探究
- 单例模式探究
- 单例模式探究
- 单例模式探究
- Java单例模式探究
- Java单例模式探究
- Java单例模式探究
- 单例模式(Singleton)探究
- Ehcache 单例模式 探究
- 设计模式--单例模式探究
- 单例模式完全剖析---- 探究简单却又使人迷惑的单例模式
- Python的单例模式
- python的单例模式
- python的单例模式
- 探究 C++ Singleton(单例模式)
- JAVA-单例模式之性能探究
- 探究单例模式(java)
- 单例模式完全剖析(1)---- 探究简单却又使人迷惑的单例模式
- 动态绑定
- SAP Project 期初数据导入
- 数字证书
- HDU 1022 Train Problem I
- C1189 rpcndr.h 错误
- python 单例模式的探究
- IAR for AVR 学习笔记
- 下载官方谷歌Chrome浏览器 离线包的方法
- OpenGL中的缓冲区对象
- Java程序员应该知道的10个调试技巧
- 拼命编码,老板会因此感谢你吗?
- 对于Java内存使用情况
- Eclipse中异常断点问题
- 曾国藩名言