首页 > 其他分享 >22.单元模式

22.单元模式

时间:2024-05-10 15:36:44浏览次数:25  
标签:__ 22 self 模式 instance st1 Student 单元 cls

【一】单例模式

  • 让一个类只创建一个对象,即所有对象都是一样的

1)元类

class MyType(type):
    def __init__(cls, name, bases, name_space):
        # 给自己的类加一个属性:instance初始值None
        cls.instance = None
        super().__init__(name, bases, name_space)
    def __call__(self, *args, **kwargs):
        obj = super.__call__(*args, **kwargs)
        if self.instance:
            return self.instance
        else:
            self.instance = obj
            return self.instance
        
class Student(metaclass=MyType):
    ...
    
st1 = Student()
st2 = Student()
print(id(st1))  # 1958218485568
print(id(st2))  # 1958218485568

2)模块

eg
  __init__.py
  common.py
singleton.py 
# __init__.py
from .common import Student
stu = Student()
# common.py
class Student():
    ...
# singleton.py
from eg import stu

st1 = stu
st2 = stu
print(id(st1))  # 2857417634960
print(id(st2))  # 2857417634960

3)装饰器

def outer(cls):
    instance = {'cls': None}
    def inner(*args, **kwargs):
        nonlocal instance
        if not instance.get('cls'):
            instance['cls'] = cls(*args, **kwargs)
        return instance['cls']
    return inner

@outer
class Student:
    def __init__(self, name):
        self.name = name

st1 = Student('a')
st2 = Student('b')
print(st1, id(st1))
print(st2, id(st2))

标签:__,22,self,模式,instance,st1,Student,单元,cls
From: https://www.cnblogs.com/Mist-/p/18184451

相关文章

  • Java学设计模式之迭代器模式
    一、迭代器模式概念1.1什么是迭代器模式迭代器模式是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。简单来说,迭代器模式可以让你遍历一个集合对象,而无需了解其内部结构。结构迭代器(Iterator):定义了访问和遍历元素的接......
  • Docker 桥接模式下端口映射会绕过防火墙
    问题描述使用Docker桥接模式启动了一个MySQL容器查看防火墙发现并未开启3306端口,但该宿主机3306端口仍能被第三方机器访问telnet152.51.32.113306 问题本质Docker在进行端口映射时,已经自动使用iptables命令修改了防火墙规则;并且这个规则不会被ufw显示、管理;甚至插入的......
  • Java学设计模式之备忘录模式
    一、备忘录模式概念1.1什么是备忘录模式备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这种模式通常用于需要实现撤销操作或者历史记录功能的场景。结构备忘录模式通常包含以下几个要素:Originator(发起人):定义了一个方法用于创建......
  • 2022 Benelux Algorithm Programming Contest (BAPC 22) A 、I、J、L
    A.AdjustedAverage(暴力枚举+二分查找)分析读完题目可以发现k很小,那么考虑暴力做法的时间复杂度为\(O(C_n^k)\),对于\(k\leq3\)的其实可以直接暴力创过去,但对于\(k=4\)的情况显然不适用。那么对应\(k=4\)的情况考虑优化,可以选择将数分为两个集合,先用一个set存下其中一个集合的所......
  • Java学设计模式之中介者模式
    一、中介者模式概念1.1什么是中介者模式中介者模式是一种行为型设计模式,它通过将对象之间的交互行为集中到一个中介者对象中来解耦对象之间的关联。这种模式被用来减少对象之间的直接通信,从而降低了系统的耦合度,使得系统易于维护和扩展。结构中介者模式通常包含以下几个要素:......
  • Java学设计模式之享元模式
    一、享元模式概念1.1什么是享元模式享元模式是一种结构型设计模式,旨在通过共享对象来最大程度地减少内存使用和提高性能。在享元模式中,对象被设计成可共享的,以便在需要时能够被多个不同的上下文使用。结构享元模式通常包含以下几个要素:Flyweight(享元):定义了共享对象的接口......
  • 2022年windows的Visual Studio常用插件及使用手册
    前景提要ViusualStudio是一款很好用的C/C++集成开发工具,具有强大的扩展功能,好用的插件,但是,很多人都是只写了有什么插件,但是,没写怎么使用这种插件,使得使用的时候很是不方便,所以,笔者最近本着自己的学习,在这里写下自己关于好用的插件的研究,希望对您的学习/工作有帮助.......
  • 【专题】2022年中国企业数字化学习行业研究报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32263多变,不确定性,复杂,模糊不清的新业务图景,加快了公司人才发展模式的数字化转变;疫情冲击离线运输与公司现金流量,消费者支出减少,机构表现受压,数字化学习突破;行业数字化水平不断提高,商业体系和学习体系之间的关联性不断加强,企业学情图谱不断完善; 阅......
  • 设计模式之七大原则
    设计模式之七大原则(一)——单一职责原则、开放-关闭原则_系统设计原则单一职责隔离-CSDN博客一、设计模式的目的设计模式的目的是为了提高代码重用性、可读性、可扩展性、可靠性,使得程序呈现出高内聚、低耦合的特性。二、设计模式的七大原则我们在设计一些设计模式时,一般遵循......
  • 程设2022期末
    A.最长下坡#include<cstdio>inta[1000];intmain(){ intn,ans=0,now=0;scanf("%d",&n); for(inti=1;i<=n;++i){ intx;scanf("%d",&x);a[i]=a[n+i]=x; } for(inti=2;i<=n*2;++i){ if(a[i......