在这之前,先了解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四种实现单例模式的方法相关推荐

  1. Python创建进程的四种方式

    Python创建进程的四种方式 百度百科 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构 ...

  2. python安装第三方库-python第三方库的四种安装方法

    讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...

  3. python数据对比找不同_利用Python读取文件的四种不同方法比对

    利用Python读取文件的四种不同方法比对 大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果.下面就来看看详细的介绍吧. 场景 逐行读取一个 ...

  4. 大数据可视化python_大数据分析之Python数据可视化的四种简易方法

    本篇文章探讨了大数据分析之Python数据可视化的四种简易方法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 数据可视化是任何数据科学或机器学习项目的一个重要组成部分 ...

  5. 查看python的版本号有 四种方案

    查看python的版本号 查看python的版本号有 四种方案 命令行查看 sys模块 查看python的版本号有 四种方案 命令行查看 命令行下查看,在配置好了开发运行环境的前提下: 输入 pyth ...

  6. python,时间的四种格式

    from time import *a=time() b=(a-timezone)/86400 c=localtime(a) d=strftime('%Y-%m-%d %H:%M:%S',c)prin ...

  7. Python 数据降噪处理的四种方法——均值滤波、小波变换、奇异值分解、改变binSize

    Python 数据降噪处理的四种方法--均值滤波.小波变换.奇异值分解.改变binSize github主页:https://github.com/Taot-chen 一.均值滤波 1)算法思想 给定 ...

  8. 用python打开浏览器的四种方法

    python打开浏览器的四种方法 1.system方法 import os os.system(r'C:\"Program Files (x86)"\"Google&qu ...

  9. python第三方库安装有哪些要求,python第三方库的四种安装方法

    讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...

最新文章

  1. C宏定义中的##,#,#@用法介绍
  2. python orm框架sqlalchemy_python ORM框架:SqlAlchemy
  3. Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭。
  4. res_config_mysql和chan_sip模块的加载分析
  5. 关于NSIS脚本的Demo
  6. TCP和IP协议的特点
  7. OSPF通过MPLS ×××
  8. CVE-2020-0688 Exchange 远程代码执行分析
  9. php.ini – 配置文件详解
  10. 【韦东山嵌入式Linux】Linux命令进阶笔记
  11. 前后端分离 获取客户端ip_前后端分离交互
  12. 苏州企业如何免费办理软件著作权
  13. 双硬盘主机安装Ubuntu 18.04
  14. 数字ic设计_总结复习
  15. 【OpenCV】Lab颜色空间
  16. 如何快速查询SCI期刊JCR和ISO缩写?
  17. codeforces1375G Tree Modification
  18. Failed to remove network i5unxjx3ahdfrhksw0fmyqpjd: Error response from daemon: network *
  19. 【Promise学习】Promise的理解
  20. 老macbook升级新版本(Big sur、Monterey)

热门文章

  1. ASP.NET Core 基于声明的访问控制到底是什么鬼?
  2. 如何让多端口网站用一个nginx进行反向代理实际场景分析
  3. Kestrel的ListenAnyIP和ListenLocalhost的区别
  4. EF批量插入太慢?那是你的姿势不对
  5. .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
  6. Dotnet core使用JWT认证授权最佳实践(二)
  7. 流传在程序员中的传说,你知道几个?
  8. .NET Core开发实战(第32课:集成事件:解决跨微服务的最终一致性)--学习笔记...
  9. 感谢所有支持wuhan2020项目的朋友!我们招换更多人加入!
  10. Redis 6 RC1发布,带来众多新特性