本文实例讲述了Python单例模式。分享给大家供大家参考,具体如下:

单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。

实现某个类只有一个实例的途径:

1,让一个全局变量使得一个对象被访问,但是他不能防止外部实例化多个对象。

2,让类自身保存他的唯一实例,这个类可以保证没有其他实例可以被创建。

多线程时的单例模式:加锁-双重锁定

饿汉式单例类:在类被加载时就将自己实例化(静态初始化)。其优点是躲避了多线程访问的安全性问题,缺点是提前占用系统资源。

懒汉式单例类:在第一次被引用时,才将自己实例化。避免开始时占用系统资源,但是有多线程访问安全性问题。

实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#encoding=utf-8

#单例模式

def PrintInfo(info):

# print unicode(info,'utf-8').decode('gbk')

print info.decode('utf-8').encode('utf-8')

import threading

#单例类

class Singleton():

instance=None

mutex=threading.Lock()

def _init__(self):

pass

@staticmethod

def GetInstance():

if(Singleton.instance==None):

Singleton.mutex.acquire()

if(Singleton.instance==None):

PrintInfo('初始化实例')

Singleton.instance=Singleton()

else:

PrintInfo('单例已经实例化')

Singleton.mutex.release()

else:

PrintInfo('单例已经实例化')

return Singleton.instance

def clientUI():

Singleton.GetInstance()

Singleton.GetInstance()

Singleton.GetInstance()

return

if __name__=='__main__':

clientUI();

结果:

1

初始化实例 单例已经实例化 单例已经实例化

追加解释 @staticmethod 在 Python中提到 classmethod 就要提到 staticmethod,不是因为二者有什么关系,而是为了让用户区分以便更清楚地写代码。在C++中,我们了解直接通过类名访问的函数称为类的静态函数,即static修饰的函数,可见C++中classmethod和staticmethod是一个概念。 那么python中二者有什么区别呢?先来看下二者如何在python代码中声明

1

2

3

4

5

6

7

8

class MyClass:

...

@classmethod # classmethod的修饰符

def class_method(cls, arg1, arg2, ...):

...

@staticmethod # staticmethod的修饰符

def static_method(arg1, arg2, ...):

...

对于classmethod的参数,需要隐式地传递类名,而staticmethod参数中则不需要传递类名,其实这就是二者最大的区别。

二者都可以通过类名或者类实例对象来调用,因为强调的是classmethod和staticmethod,所以在写代码的时候最好使用类名,良好的编程习惯吧。

对于staticmethod就是为了要在类中定义而设置的,一般来说很少这样使用,可以使用模块级(module-level)的函数来替代它。既然要把它定义在类中,想必有作者的考虑。

对于classmethod,可以通过子类来进行重定义。

提到类级别的函数,也顺带提及类级别的变量

1

2

3

4

5

class MyClass:

i= 123 # class-level variable

def __init__(self):

self.i= 456 # object-level variable

...

为了清晰地区分上面两个i,最好的办法就是考虑到python中的一切都是object,所以i=123属于class object的,i=456属于class instance object

希望本文所述对大家Python程序设计有所帮助。

python编程入门单例_Python单例模式实例详解相关推荐

  1. python编程入门单例_python实现单例模式怎么写啊?

    这个网上有很多的,你可以搜一搜,单例设计模式很多面试官都会考的,最好是记住一两个,我下面写一个例子给你看一下 使用__new__方法 在__new__方法中把类实例绑定到类变量_instance上,如 ...

  2. python编程入门单例_常见的在Python中实现单例模式的三种方法

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在 ...

  3. python编程入门与案例详解课后题答案-Python入门之三角函数sin()函数实例详解

    描述 sin()返回的x弧度的正弦值. 语法 以下是sin()方法的语法: importmath math.sin(x) 注意:sin()是不能直接访问的,需要导入math模块,然后通过math静态对 ...

  4. python编程入门与案例详解pdf-Python入门之三角函数sin()函数实例详解

    描述 sin()返回的x弧度的正弦值. 语法 以下是sin()方法的语法: importmath math.sin(x) 注意:sin()是不能直接访问的,需要导入math模块,然后通过math静态对 ...

  5. python教程三角函数_Python入门之三角函数tan()函数实例详解

    描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 m ...

  6. Python中Print()函数的用法___实例详解(二)(全,例多)

    Python中Print()函数的用法___实例详解(二)(全,例多) 目录 十一.Print()小例子 十二.Print()中文输入显示乱码问题 十三.Print()写入文件 十四.print()在 ...

  7. python画tan_Python入门之三角函数tan()函数实例详解

    描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 m ...

  8. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

  9. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

最新文章

  1. mac下 VisualBox 虚拟机转移到活动硬盘,出现 UUID 错误
  2. 自学python能干些什么副业好-python可以作为副业赚钱嘛?
  3. 最短路dijkstra算法详解_最短路径问题---Dijkstra算法详解
  4. 函数指针数组指针+结构体数组
  5. L3-007. 天梯地图-PAT团体程序设计天梯赛GPLT
  6. model.train()和model.eval()
  7. Windows下vim方式操作软件+Gvim使用
  8. EXPLAIN 具体含义 ( type possible_key key key_len ref )
  9. Word转换PDF技巧之通过虚拟打印机生成pdf格式文件
  10. maccms-cve_2017_17733漏洞复现
  11. 如何将arcgis中shape要素文件转为mapgis中点线面
  12. Linux文件权限与目录配置
  13. 如何区别聚合支付“一清二清”?
  14. 【perl计算基因在基因组上的距离】
  15. grabber.start()获取摄像头数据异常
  16. 微信小程序如何获取用户绑定手机号
  17. 林业工程抗旱造林技术
  18. 基于Basys2的分秒计时器的设计
  19. 学习经验分享【26】论文写作画图方法(持续更新)
  20. 基于STM32F103单片机的生理监控心率脉搏监控TFT彩屏显示

热门文章

  1. 每个Java开发人员都应该知道的10个基本工具
  2. java jax-rs_在Java EE 6中将Bean验证与JAX-RS集成
  3. Java Web应用程序的SecureLogin
  4. 将旧版本从Java EE 5减少到7
  5. jsf 开发_JSF开发人员应该知道的5种有用方法
  6. mapreduce介绍_MapReduce:简单介绍
  7. 在JVM中记录世界停顿
  8. Java EE拦截器
  9. EE Servlet 3:简单表单处理
  10. 使用JGit API探索Git内部