python编程入门单例_Python单例模式实例详解

本文实例讲述了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程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 8入门与实践_30个Java入门技巧和最佳实践

java 8入门与实践Java是最流行的编程语言之一-无论是Win应用程序,Web应用程序,移动,网络,消费电子产品,机顶盒设备,Java随处可见。 在Java上运行的设备超过30亿。 据Oracle称 ,正在使用50亿张J…

css中会计算的属性,2017年12月聚合文章--calc() ---一个会计算的css属性 | 码友网

最近这个月一直在赶项目开发,遇到的问题和学到的前端知识没有更新到博客园,现在闲了下来,就整理一下前端知识。在项目开发中,在样式这方面花费的时间较多,因为针对于数字的变化特别多,本人不爱记数字&#…

C/C++ 中公认的三个难点

点击蓝字关注我们C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块“难啃的硬骨头”几乎是公认级别的。0x01 指针指针公认最难理解的概念,也是让很多初学者选择放弃的直接原因。指针之所以难理解,因…

python 字符串分割_如何使用python语言split方法对不同字符串分割

在JavaScript中,可以使用split()将字符串分割成字符串数组;而在python语言中,split()方法也可以将字符串进行分割,分割之后的结果放置在列表中。下面利用几个实例说明split()方法的用法,操作如下:工具/原料…

java 拼图_功能项目拼图将Java 9引入

java 拼图因此,拼图项目...我们已经对此颇为了解,但尚未看到计划如何兑现其承诺的细节。 这篇文章将精确地做到这一点,并介绍项目的核心概念和功能。 系列 这篇文章是正在进行的有关拼图项目系列的一部分。 按照推荐的顺序(不同于…

win7 蓝牙4.0 ble驱动_初识物联网无线通信技术之蓝牙4.0BLE协议栈

[本文属原创,转载请附上原文出处链接。]一、需要的软件工具1、BLE协议栈(BLE-CC254x-1.4.0)2、IAR开发软件(IAR Embedded Workbench8.20.2)注:1.4.0协议栈使用8.20.2的iar版本,1.3.2协议栈等使用的是8.10.4的iar版本。二、BLE协议栈安装目录下…

spring javaee_开发人员对Spring vs JavaEE的看法

spring javaee在Java社区中,Spring vs JavaEE是一个永无止境的争论。 在这样的辩论中,人们组成一个团体,由两个传播者,建筑师和一个平台的核心粉丝组成,并且不断进行辩论。 参与辩论的人可能是负责平台选择的架构师。 …

C语言:谈谈指针!

点击蓝字关注我们指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以本文尽可能的通过一篇文章完全讲解指针。为什么需要指针?指针解决了一些编程…

C/C++ 中的 #pragma once 作用是什么?

点击蓝字关注我们1、#pragma once有什么作用?为了避免同一个头文件被包含(include)多次,C/C中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。在能够支持这两种方式的编译器上,…

rowmapper_Spring Integration Jdbc RowMapper示例

rowmapperJDBC入站通道适配器的基本功能是执行SQL查询,提取数据并将以Message形式封装的结果集传递到本地通道。 您可以在JDBC入站通道适配器的示例中阅读有关此内容的更多信息。 有效负载的类型由行映射策略决定。 默认结果是产生类型为List的有效负载&#xff0c…

python做大数据的框架_Python+大数据计算平台,PyODPS架构手把手教你搭建

原文链接:http://click.aliyun.com/m/13965/ 在2016年10月的云栖社区在线培训上,来自阿里云大数据事业部的秦续业分享了《双剑合壁——Python和大数据计算平台的结合实战》。他主要介绍了数据分析和机器学习的方法、DataFrame整体架构以及基础API、前端、…

武魂觉醒s系列服务器,[多线]星河斗罗——新服开荒丨高程度剧情还原丨3D坐骑丨魂环丨武魂觉醒[1.12.2]...

[服务器介绍]星河斗罗 全新原创开荒斗罗大陆服务器前言:超高还原小说真实性,独特的武魂贴图,魂兽建模,坐骑建模,开放性冒险地图,让您更加体验斗罗大陆的真实性。进服送新手大礼包:装备&#xff…

C++ 的万能头文件,你知道多少?

点击蓝字关注我们C 中万能头文件 bits/stdc.h 的介绍很多小伙伴估计看有的代码会碰见没有多余的其它头文件比如 algorithm、cmath、iostream 而是用了一行 #include<bits/stdc.h> 这样的头文件并感到诧异&#xff0c;想这是什么。其实这是一个包含了 C 所有头文件的一个头…

pytorch dataset读取数据流程_高效 PyTorch :如何消除训练瓶颈

加入极市专业CV交流群&#xff0c;与 10000来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流&#xff01;同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总&#xff0c;行业技术交流。关注 极市平台 公众号 &#xff0c;回复 加群&…

APP 文档服务器,app服务器

app服务器 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。调用接口出错后&#xff0c;将不会返回结果数据。调用方可根据每个接口对…

webresource_Jersey WebResource –标头不附加

webresource昨天&#xff0c;在使用Jersey WebResource类进行HTTP调用时遇到了一个奇怪的问题&#xff1a;似乎我设置的标头在执行HTTP调用时被忽略了。 提前阅读。 我试图实现的目标是调用REST Api从我们的应用程序中获取一些数据。 为此&#xff0c;我使用了Jersey客户端 &a…

需求最高的8种编程语言

点击蓝字关注我们在过去的 8 个月时间里&#xff08;从 2021 年 10 月到 2022 年 6 月&#xff09;&#xff0c;DevJobsScanner 分析了超过 700 万份开发者工作需求&#xff0c;得出了目前行业需求量最高的 8 种编程语言。需要注意的是&#xff0c;在这 700 万份工作需求中&…

java面包屑实现_在Java中实现过滤器和面包店锁

java面包屑实现为了了解锁的工作原理&#xff0c;实现自定义锁是一种好方法。 这篇文章将展示如何在Java上实现Filter和Bakery锁&#xff08;自旋锁&#xff09;&#xff0c;并将它们的性能与Java的ReentrantLock进行比较。 过滤器锁和面包房锁满足互斥并且也是无饥饿算法&…

postman 怎么调试pos_SpringBoot|第十五章:基于Postman的RESTful接口测试

前言从上一章节开始&#xff0c;接下来的几个章节会讲解一些开发过程中配套工具的使用。俗话说的好&#xff0c;工欲善其事&#xff0c;必先利其器。对于开发人员而言&#xff0c;有个好用的工具&#xff0c;也是一件事半功倍的事&#xff0c;而且开发起来也很爽&#xff0c;效…

spring配置jndi_在Spring Framework中通过JNDI进行配置

spring配置jndi从某个时候开始&#xff0c;应用程序必须是可配置的。 从第一个版本0.9开始&#xff0c;Spring Framework就为该问题提供了一个很好的辅助工具&#xff0c;该类为PropertyPlaceholderConfigurer类&#xff0c;而从Spring Framework 3.1开始&#xff0c;为Propert…