python单例模式继承_Python四种实现单例模式的方法
在这之前,先了解super()和__new__()方法
super()方法:
返回一个父类或兄弟类类型的代理对象,让你能够调用一些从继承过来的方法。
它有两个典型作用:
a. 在单继承的类层次结构中,super()可用于引用父类而不显式父类名称,从而使代码更易于维护。
b. 在多重继承中,可以保证公共父类仅被执行一次。
__new__方法:
a.它是一个类级别的静态方法。通常用于控制生成一个新实例的过程。
b.返回的是一个实例化出来的实例
下面为四种实现单例模式的方法
1. 使用__new__方法
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kwargs)
rerurn cls._instance
class A(Singleton):
pass
# 类A即为单例类
2.共享属性
# 创建实例时把所有实例的__dict__指向同一个字典,这样它们都具有相同的属性和方法(类的__dict__存储对象属性)
class Singleton(object):
_state = {}
def __new__(cls, *args, **kwargs):
ob = super(Singleton,cls).__new__(cls, *args, **kwargs)
ob.__dict__ = cls._state
return ob
class B(Singleton):
pass
# 类B即为单例类
3.使用装饰器
def singleton(cls):
instance = {}
def wapper():
if cls not in instance:
instance[cls] = cls(*args, **kwargs)
return instance[cls]
return wapper
@singleton
class C:
pass
# 类C即为单例类
4.import方法
# 作为Python模块时是天然的单例模式
#创建一个sington.py文件,内容如下:
class Singleton(object):
def foo(self):
pass
mysington = Singleton()
# 运用
from sington import mysington
mysington.foo()
python单例模式继承_Python四种实现单例模式的方法相关推荐
- Python创建进程的四种方式
Python创建进程的四种方式 百度百科 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构 ...
- python安装第三方库-python第三方库的四种安装方法
讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...
- python数据对比找不同_利用Python读取文件的四种不同方法比对
利用Python读取文件的四种不同方法比对 大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果.下面就来看看详细的介绍吧. 场景 逐行读取一个 ...
- 大数据可视化python_大数据分析之Python数据可视化的四种简易方法
本篇文章探讨了大数据分析之Python数据可视化的四种简易方法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 数据可视化是任何数据科学或机器学习项目的一个重要组成部分 ...
- 查看python的版本号有 四种方案
查看python的版本号 查看python的版本号有 四种方案 命令行查看 sys模块 查看python的版本号有 四种方案 命令行查看 命令行下查看,在配置好了开发运行环境的前提下: 输入 pyth ...
- python,时间的四种格式
from time import *a=time() b=(a-timezone)/86400 c=localtime(a) d=strftime('%Y-%m-%d %H:%M:%S',c)prin ...
- Python 数据降噪处理的四种方法——均值滤波、小波变换、奇异值分解、改变binSize
Python 数据降噪处理的四种方法--均值滤波.小波变换.奇异值分解.改变binSize github主页:https://github.com/Taot-chen 一.均值滤波 1)算法思想 给定 ...
- 用python打开浏览器的四种方法
python打开浏览器的四种方法 1.system方法 import os os.system(r'C:\"Program Files (x86)"\"Google&qu ...
- python第三方库安装有哪些要求,python第三方库的四种安装方法
讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...
最新文章
- C宏定义中的##,#,#@用法介绍
- python orm框架sqlalchemy_python ORM框架:SqlAlchemy
- Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭。
- res_config_mysql和chan_sip模块的加载分析
- 关于NSIS脚本的Demo
- TCP和IP协议的特点
- OSPF通过MPLS ×××
- CVE-2020-0688 Exchange 远程代码执行分析
- php.ini – 配置文件详解
- 【韦东山嵌入式Linux】Linux命令进阶笔记
- 前后端分离 获取客户端ip_前后端分离交互
- 苏州企业如何免费办理软件著作权
- 双硬盘主机安装Ubuntu 18.04
- 数字ic设计_总结复习
- 【OpenCV】Lab颜色空间
- 如何快速查询SCI期刊JCR和ISO缩写?
- codeforces1375G Tree Modification
- Failed to remove network i5unxjx3ahdfrhksw0fmyqpjd: Error response from daemon: network *
- 【Promise学习】Promise的理解
- 老macbook升级新版本(Big sur、Monterey)
热门文章
- ASP.NET Core 基于声明的访问控制到底是什么鬼?
- 如何让多端口网站用一个nginx进行反向代理实际场景分析
- Kestrel的ListenAnyIP和ListenLocalhost的区别
- EF批量插入太慢?那是你的姿势不对
- .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
- Dotnet core使用JWT认证授权最佳实践(二)
- 流传在程序员中的传说,你知道几个?
- .NET Core开发实战(第32课:集成事件:解决跨微服务的最终一致性)--学习笔记...
- 感谢所有支持wuhan2020项目的朋友!我们招换更多人加入!
- Redis 6 RC1发布,带来众多新特性