python单例模式读取配置文件(Python下简易的单例模式详解)
类别:脚本大全 浏览量:658
时间:2021-10-22 07:09:23 python单例模式读取配置文件
Python下简易的单例模式详解python 下的单例模式
要点:
- 1.某个类只能有一个实例;
- 2.它必须自行创建这个实例;
- 3.它必须自行向整个系统提供这个实例
方法:重写new函数
应该考虑的情况:
- 1.这个单例的类可能继承了别的类
- 2.这个单例的类还有可能要接收参数来实例化
要点:
实例化的过程其实不是直接调用init的,首先是new分配一块空间来创建实例,再由init对这个实例进行初始化.我们无法阻止new和init的调用,我们只能是限制他们的内容,以此使他们能达到单例的目的
代码:
|
class people( object ): def __new__( cls , * args, * * kargs): return super (people, cls ).__new__( cls ) def __init__( self ,name): self .name = name def talk( self ): print ( "hello,i am %s" % self .name) class student(people): def __new__( cls , * args, * * kargs): if not hasattr ( cls , "instance" ): cls .instance = super (student, cls ).__new__( cls , * args, * * kargs) return cls .instance a = student( "timo" ) print (a) b = student( "kysa" ) c = student( "luyi" ) a.talk() b.talk() print (c) |
这里的输出结果是:
<__main__.student object at 0x0000025ac48bf2e8>
hello,i am luyi
hello,i am luyi
<__main__.student object at 0x0000025ac48bf2e8>
可以确定的是: 确实是单例了,因为a的id和b,c的id是一致的
但是为什么:a先创建明明是timo,可是为什么a的name变成了luyi呢?
原因:
虽然确实是a这个实例,但是在最后c重新调用了new,返回了a的实例,再经过init,改变了a的属性,执行时name ->luyi.
解决:
这种情况下,我们只需要设置类变量,让init在类变量的限制下,只对类进行一次有效的初始化.
代码:
|
class people( object ): def __new__( cls , * args, * * kargs): return super (people, cls ).__new__( cls ) def __init__( self ,name): self .name = name def talk( self ): print ( "hello,i am %s" % self .name) class student(people): def __new__( cls , * args, * * kargs): if not hasattr ( cls , "instance" ): cls .instance = super (student, cls ).__new__( cls , * args, * * kargs) return cls .instance def __init__( self ,name): if not hasattr ( self , "init_fir" ): self .init_fir = true super (student, self ).__init__(name) a = student( "timo" ) print (a) b = student( "kysa" ) c = student( "luyi" ) a.talk() b.talk() print (c) |
好了,到这里就用python实现了一个简易的单例模式.
以上所述是小编给大家介绍的python下简易的单例模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://blog.csdn.net/whyfive4/article/details/89048773
您可能感兴趣
- python之pil模块使用(Python3安装Pillow与PIL的方法)
- python面向对象基本思想(详解Python:面向对象编程)
- python封装函数讲解(Python中super函数用法实例分析)
- python的遍历循环(对python For 循环的三种遍历方式解析)
- python数据分析用到的模块(python模块之subprocess模块级方法的使用)
- 用mysql语句写python学生管理系统(Python基于mysql实现学生管理系统)
- python多进程与多线程详解(Python线程之定位与销毁的实现)
- python与php比较(浅谈php调用python文件)
- python选择语句形式判断回文数(Python3实现的回文数判断及罗马数字转整数算法示例)
- python爬虫经典步骤(详解python爬虫系列之初识爬虫)
- python 基于内容的推荐系统(不到40行代码用Python实现一个简单的推荐系统)
- python2.7连接sqlserver数据库(Python使用sqlalchemy模块连接数据库操作示例)
- python类继承和封装(Python面向对象程序设计类的封装与继承用法示例)
- python实现列表删除重复元素(Python代码实现删除一个list里面重复元素的方法)
- python指定参数教程(详解Python传入参数的几种方法)
- python异常信息处理(Python使用修饰器进行异常日志记录操作示例)
- 菲律宾游学(菲律宾游学中介机构)
- 菲律宾美食(菲律宾美食排行榜前十名)
- 菲律宾特产(菲律宾特产最值得买回国)
- 越南特产(越南特产首饰)
- TVB负评王连续挑战警察角色《使徒行者3》中将饰演卧底(TVB负评王连续挑战警察角色使徒行者3中将饰演卧底)
- 《精英律师》剧照首曝光,实力演员飙戏,演绎律政职场百态(精英律师剧照首曝光)
热门推荐
- vue 如何执行动态js(如何利用vue.js实现拖放功能)
- 使用Visual Studio进行单元测试
- Sql Server 更新锁(UPDLOCK)
- pythonbug生成图片(python实现海螺图片的方法示例)
- centos7怎样安装vnc(Ubuntu 20.04系统中安装vncserver的方法步骤)
- 怎么新建数据库登录名用sql语句(T-sql语句修改SQL Server数据库逻辑名、数据库名、物理名的方法)
- vueclass和style绑定(Vue中Class和Style实现v-bind绑定的几种用法)
- sql server中随机函数NewID()和Rand()
- python mysql配置(详解python校验SQL脚本命名规则)
- dedecms官方安装手册(Linux下安装DedeCMS及安全设置教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9