python 面向对象编程 之 单例模式
单例模式三种实现方式:
单例模式:单例模式是解决系统资源浪费的一种方案,是指一个类实例化后可以多次使用此对象。
单例模式应用场景:数据库操作、日志、后台打印
# settings.py# Host='127.0.01'# Port=8888 #方法一: 利用自定义元类来 控制对象的生成。class Mymeta(type): def __init__(self, class_name, class_base, class_dic): ''' :param class_name: 类名 :param class_base: 基类 :param class_dic: 名称空间 ''' obj = self.__new__(self)#创建新的对象 self.__init__(obj, settings.Host, settings.Port) self.__instance = obj super(Mymeta, self).__new__(class_name, class_name, class_dic) def __call__(self, *args, **kwargs): # 对象后加括号触发 obj() if not (args and kwargs): return self.__instance obj = self.__new__(self) self.__init__(obj, *args, **kwargs) return obj class Mysql(metaclass=Mymeta): def __init__(self, Host, Port): self.Host = Host self.Port = Port # 方法二:利用类的绑定方法 class Mysql: __instance = None def __init__(self, Host, Port): self.Host = Host self.Port = Port @classmethod def single(cls, *args, **kwargs): if not (args and kwargs): if not cls.__instance: cls.__instance = cls.__init__(settings.Host, settings.Port) return cls.__instance return cls.__init__(*args, **kwargs) # 方法三:利用装饰器def single(cls): _instance = cls.__init__(settings.Host, settings.Port) def wrapper(*args, **kwargs): if not (args and kwargs): return _instance return cls.__init__(*args, **kwargs) return wrapper @singleclass Mysql: def __init__(self, Host, Port): self.Host = Host self.Port = Port
python 面向对象编程 之 单例模式的更多相关文章
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- python 面向对象编程(一)
一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class c ...
- Python面向对象编程指南
Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
- Python面向对象编程(下)
本文主要通过几个实例介绍Python面向对象编程中的封装.继承.多态三大特性. 封装性 我们还是继续来看下上文中的例子,使用Student类创建一个对象,并修改对象的属性.代码如下: #-*- cod ...
- Python 面向对象编程——访问限制
<无访问限制的对象> 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑.但是,从前面Student类的定义来看(见:Py ...
- Python 面向对象编程 继承 和多态
Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...
- Python 面向对象编程基础
Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...
- python面向对象编程学习
python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...
随机推荐
- [PHP]更新中间关联表数据的两种思路
---------------------------------------------------------------------------------------------------- ...
- 使用DOM的方法获取所有li元素,然后使用jQuery()构造函数把它封装为jQuery对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- yii NAV x下拉
$menuItems[] = [ 'label' => "<img src='/images/small.jpg'>", 'url' => ['/site/ ...
- 用伪类:after画箭头
在项目中,经常会用到尖头,尤其是表单中,会有剪头的样式,尽量不要用图片显示.用伪类实现. eg 查看更多 > html: <div class="more"> ...
- javascript中scrollTop和offsetTop的区别
scrollTop是指某个可滚动区块向下滚动的距离,offsetTop则是元素的上边框与父元素的上边框的绝对距离. 1.offsetTop : 当前对象到其上级层顶部的距离. 不能对其进行赋值.设 ...
- 附加任务:团队作业7 Alpha冲刺
附加任务:团队作业7 Alpha冲刺 附加任务要求参考东北师范大学陈志勇老师博客:https://edu.cnblogs.com/campus/nenu/2016SE_NENU/homework/19 ...
- com.google.gson.stream.MalformedJsonException
今天下午项目更新后,调用接口时,提示“请求失败”,发现项目网络框架解析时,报错如下:com.google.gson.stream.MalformedJsonException: Unterminate ...
- Spring AOP @Aspect
spring提供了两个核心功能,一个是IoC(控制反转),另外一个便是Aop(面向切面编程),IoC有助于应用对象之间的解耦,AOP则可以实现横切关注点(如日志.安全.缓存和事务管理)与他们所影响的对 ...
- U3D框架—单例框架
写程序应遵循的原则:高内聚(内容的聚合),低耦合(功能与功能之间的联系) 代码里尽量不要有冗余:既重复,没有用的代码 using System.Collections; using System.Co ...
- nginx配置 解决ajax请求跨域问题
文章来源:http://to-u.xyz/2016/06/30/nginx-cors/ 背景描述 最近在研究RESTful API接口设计,使用的是Nginx,要实现本地http://127.0.0. ...