day26 面向对象 单例模式总结

如果是在python2中,就需要手动继承object,

基于__new__方法

        基于__new__方法
        class Foo(object):
            def __new__(cls,*args,**kwargs):
                if not hasattr(cls,‘_instance‘):
                    cls._instance=super(Foo,cls).__new__(cls,*args,**kwargs)
                return cls._instance     
 基于装饰器方法
def foo(cls,*args,**kwargs):
            dic={}
            def _foo():
                if cls not in dic:
                    dic[cls]=cls(*args,**kwargs)
                return dic[cls]
            return _foo

        @foo
        class MyClass(object):
            x=2
            def __init__(self,x=1)
                self.x=x
基于元类metaclass实现
class Singleton(type):
            def __init__(cls,*args,**kwargs):
                super(Singleton,cls).__init__(name,bases,dict)
                cls._instance=None
            def __call__(cls,*args,**kwargs):
                if cls._instance is None:
                    cls._instance=super(Singleton,cls).__call__(*args,**kwargs)
                return cls._instance

        class MyClass(object):
            __metaclass__=Singleton

知识点总结,封装,静态变量变成私有变量

原文地址:https://www.cnblogs.com/2012-dream/p/7881750.html

时间: 2024-10-03 08:24:50

day26 面向对象 单例模式总结的相关文章

Php面向对象 – 单例模式

保证类只有一个实例 1.    如何可以解决一个类可以被无限地实例化? New,就能实例化一次,怎么去限制,用户不能无限次地new? 将构造方法私有化.所有外部的new都操作失败 class  MySQLDB { private  function __construct() { } } 2.    一旦构造方法私有化,意味着类不能再类外实例化.但可以在类内实例化. 增加一个公共的静态方法,通过类来调用该方法,在方法内可以执行new操作. class  MySQLDB { private  fu

php面向对象单例模式、工厂模式及6大原则

一.单例模式目的:为了控制对象的数量(只能够有一个,相当于类的计划生育)做法1.将类的构造函数做成私有的2.在类里面做了一个公有的函数来造对象3.将该函数变为静态的4.在函数里面加控制 class Ren { public $name; static public $dx; //静态成员变量用来存储该对象 private function __construct() //把构造函数设置为私有,类的外部就不能用new造对象了 { } static function DuiXiang() //做一个

[设计模式][面向对象]单例模式

设计模式遵循的原则有6个: 1.开闭原则(Open Close Principle) 对扩展开放,对修改关闭. 2.里氏代换原则(Liskov Substitution Principle) 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为. 3.依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,对接口编程,依赖于抽象而不依赖于具体. 4.接口隔离原则(Interface Seg

PHP面向对象单例模式(懒汉式)

知识点: 一.三私一公: ①.私有静态属性,又来储存生成的唯一对象 ②.私有构造函数 ③.私有克隆函数,防止克隆--clone ④.公共静态方法,用来访问静态属性储存的对象,如果没有对象,则生成此单例 二.关键词instanceof 检查此变量是否为该类的对象.子类.或是实现接口.

Python单例模式

1.单例模式介绍 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时, 单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个 全局对象,这样有利于我们协调系统整体的行为. --以上来自维基百科 从定义上来看,这会是一个很有用的避免冲突的设计模式,相当于把所有同样资源的调用 都交给了一个资源代理.那么 Python 中该如何实现这一模式呢? #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author: enzhi.wa

《JAVA学习笔记(1---13-4)》

[1]问题: 1.什么叫做面向过程? 2.什么叫做面向对象? 解答: 1: 所谓的面向过程就是我们是一个执行者,我们要开发一个项目,这个项目要求要实现很多功能,作为执行者的我们就需要 去一个一个的找这些功能,然后组装,最后形成一个产品. 此时的我们是站在执行者这个立场上的. 2: 而所谓的面向对象呢,就是我们是站在指挥者这个立场上的. 首先(1)面向对象是一种符合人们思考习惯的思想 (2)面向过程更多的体现的是执行者,在面向对象中更多的是体现指挥者,指挥对象做事情.(3)面向对象把复杂问 简单化

爬虫--scrapy

电影天堂爬虫实例 下图是电影天堂国内电影的首页. 将要通过代码实现的是:找到其中是最新电影并且评分高于8.0的电影. 第一步代码实现: 1 # _*_ coding:utf-8 _*_ 2 # _author:khal_Cgg 4 import requests 5 from bs4 import BeautifulSoup 6 import re 7 req = {} # 最后返回的电影列表 8 def re_func(text): # 每一次请求都会被这个函数处理分析是否过标准 9 glob

黑马2018年最新kotlin项目实战视频 (手机影音、即时通讯、黑马外卖、坦克大战等)

├─1.kotlin简介和学习方法│ 01_kotlin课程简介_01.mp4│ 02_kotlin学习方法_01.mp4│ 03_kotlin选好教练车_01.mp4│ 03_kotlin选好教练车_02.mp4│ 04_kotlin你好世界_01.mp4│ 05_kotlin变量与输出_01.mp4│ 05_kotlin变量与输出_02.mp4│ ├─10.类,对象和接口(三)│ 38_kotlin面向对象-抽象类和接口_01.mp4│ 38_kotlin面向对象-抽象类和接口_02.mp4

文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述,基本分类 如下图所示: 类成员包括字段,方法,和属性 2.字段 如上图字段分为普通字段和静态字段,两者的使用有区别,但是最大的区别在于两者在内存中的保存位置有区别. 普通字段属于对象而静态字段属于类,在使用过程中谁的字段就由谁来调用. 静态字段和普通字段的定义如下: 在调用时分各自调用 #####类