广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的单例模式与反射机制详解
  • 276
分享到

Python中的单例模式与反射机制详解

2024-04-02 19:04:59 276人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录单例模式反射hasattergetattrsetattr总结 单例模式 一般情况下,类可以生成任意个实例,而单例模式只生成一个实例 我们先用单例模式设计一个Rectangle类

单例模式

一般情况下,类可以生成任意个实例,而单例模式只生成一个实例

我们先用单例模式设计一个Rectangle类

然后用__new__方法设计单例模式,代码如下


class Rectangle:
    def __init__(self,length,width):
        self.length=length
        self.width=width
    def __new__(cls, *args, **kwargs):#__new__至少要有一个参数cls,代表要实例化的类
        if not hasattr(cls,'obj'):  #判断类当中有没有实例,如果没有则新建
            cls.obj=object.__new__(cls)  #生成实例对象
        return cls.obj

然后我们来验证下,单例模式下是否只能生成一个实例


rec1 = Rectangle(10,8)#判断类中没有实例,则新建实例rec1
print(rec1.length,rec1.width)#这时候我们打印下rec1这个长方形的长和宽
>>>10 8#是我们输入的值
rec2 = Rectangle(6,4)
#Rectangle已经创建过rec1实例了,所以不会再生成新的实例,此时的rec1和rec2指向是同一个对象:Rectangle(6,4)
print(rec1.length,rec1.width)#打印下rec1的长和宽
print(rec2.length,rec2.width)#打印下rec2的长和宽
>>>
6 4 
6 4 
print(id(rec1)==id(rec2))
>>>Ture #对象/实例只有一个,只是赋给了不同的变量名

单例模式在程序设计中比较典型的应用场景:多个用户同时调用某个模块时,会生成一些日志,我们希望这些日志存在同一个文件内,而不是多个文件。

在生成日志模块我们就可以采用单例模式进行设计。

反射

概念:简单来说就是可以利用字符串来映射模块中的相应方法然后可以操作模块中相应的方法

我们以一个饭店点菜的实际场景来理解python的反射机制


class Food_list:#创建一个饭店菜单的类
    def yxrs(self):
        return '鱼香肉丝'
    def gbjd(self):
        return '宫保鸡丁'
    def hspg(self):
        return '红烧排骨'

hasatter

hasatter(对象,属性或方法名)

判断对象中是否有某个属性或某个方法,返回值是布尔型


guke1 = Food_list()#实例化一个顾客对象
while True:
    diancai = input('请点菜:  ')
    if hasattr(guke1,diancai):#判断顾客点的菜有没有
        print('好的,马上去做')
        break
    else:
        print('这个没有,换个别的吧')
>>>请点菜:  佛跳墙
>>>这个没有,换个别的吧
>>>请点菜:  yxrs
>>>好的,马上去做

getattr

getattr(对象,属性或方法名,缺省值) 判断对象中是否有某个属性或某个方法,如果有返回方法本身,没有则返回缺省值


guke1 = Food_list()#实例化一个顾客对象
def fun1():#定义一个方法,用作getattr的缺省值
    return '没有这道菜'
foodname = input('请输入要翻译的菜名:')
a = getattr(guke1,foodname,fun1)
#判断guke1中有没有foodname方法,有则返回这个方法,没有则返回fun1方法
print(a())#执行返回的方法
>>>请输入要翻译的菜名:yxrs#guke1中有yxrs方法,则返回这个方法
>>>鱼香肉丝
>>>请输入要翻译的菜名:dsfsfs#guke1中有没有dsfsfs方法,则返回fun1方法
>>>没有这道菜

setattr

setattr(对象,属性,新值)

将实例的属性改为新的值,如果属性不存在则新建

我们给实例guke1加个价格属性


guke1 = Food_list()#实例化一个顾客对象
setattr(guke1,'proce','23元')
print(guke1.proce)
>>>
23元

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Python中的单例模式与反射机制详解

本文链接: https://www.lsjlt.com/news/158729.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中的单例模式与反射机制详解
    目录单例模式反射hasattergetattrsetattr总结 单例模式 一般情况下,类可以生成任意个实例,而单例模式只生成一个实例 我们先用单例模式设计一个Rectangle类 ...
    99+
    2022-11-12
  • Java中的反射机制示例详解
    目录反射什么是Class类获取Class实例的三种方式通过反射创建类对象通过反射获取类属性、方法、构造器更改访问权限和实例赋值运用场景反射 反射就是把Java类中的各个成分映射成一个...
    99+
    2022-11-13
  • Java 反射机制的实例详解
    Java 反射机制的实例详解前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。正文 Java反射机制定义Java反射机制是指在运行状态中...
    99+
    2023-05-31
    java 反射机制 ava
  • Python反射机制案例超详细讲解
    目录一、导包案例二、基础知识1、是什么2、怎么用三、使用案例一、导包案例 我们导入第三方库,可以使用import。那我们现在有一个需求,我需要动态输入一个模块名,然后导入,这应该怎么...
    99+
    2022-11-11
  • 详解python单例模式与metaclass
    单例模式的实现方式 将类实例绑定到类变量上 class Singleton(object): _instance = None def __new__(cls, *args): if ...
    99+
    2022-06-04
    详解 模式 python
  • Java中的反射机制详解
    目录一、什么是反射?二、为什么要用反射三、Class类四、获取Class类对象的四种方式五.通过反射构造一个类的实例①使用Class.newInstance②通过反射先获取构造方法再...
    99+
    2022-11-12
  • Java中的反射机制基本运用详解
    目录Java中的反射机制基本运用1、什么是反射(reflect)2、反射机制提供的功能3、反射->获取类对象4、反射->利用无参构造实例化对象5、反射->利用有参构...
    99+
    2022-11-12
  • 详解Java中的反射机制和动态代理
    目录一、反射概述二、反射之Class类2.1、初识Class类2.2、Class有下面的几个特点2.3、获取Class类实例2.4、关于包装类的静态属性2.5、通过Class类的其他...
    99+
    2022-11-12
  • Java反射机制在Spring IOC中的应用详解
    目录Java反射机制在SpringIOC的应用下面是Spring通过配置进行实例化对象Spring的配置如下所示实现一下Spring底层处理原理反射机制、反射机制的作用、反射机制的功...
    99+
    2022-11-12
  • 如何探讨Java代理模式与反射机制的实际应用
    如何探讨Java代理模式与反射机制的实际应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫反射。而代...
    99+
    2023-06-17
  • JAVA中反射机制和模块化的深入讲解
    目录一.类加载1.1类加载描述1.2类的加载1.3类的连接1.4类的初始化        1.4.1类...
    99+
    2022-11-12
  • Python实现单例模式的四种方式详解
    简介:单例模式可以保证一个类仅有一个实例,并提供一个访问它的全局访问点。适用性于当类只能有一个实例而且客户可以从一个众所周知的访问点访问它,例如访问数据库、MQ等。 实现方式: 1、...
    99+
    2022-11-11
  • 详解Java单例模式的实现与原理剖析
    目录一、什么是单例模式二、哪些地方用到了单例模式三、单例模式的优缺点优点缺点四、手写单例模式饿汉式枚举饿汉式DCL懒汉式双检锁懒汉式内部类懒汉式小结一、什么是单例模式 单例模式(Si...
    99+
    2022-11-13
  • Java中的单例模式详解(完整篇)
    目录前言WHATWHY饿汉式实现一:静态实例参数与静态代码块实现二:静态内部类懒汉式错误一:单线程实现错误二:同步方法错误三:同步代码块之单次检查错误四:同步代码块之双重检查正确:双...
    99+
    2022-11-12
  • 详解Java单例模式中的饿汉和懒汉模式
    目录一.什么是单例模式一.饿汉模式1.饿汉模式的概念2.饿汉模式代码3.多线程是否线程安全二.懒汉模式1.懒汉模式的概念2.单线程情况下的懒汉模式3.多线程情况下的懒汉模式一.什么是...
    99+
    2023-05-14
    Java单例模式 Java单例饿汉模式 Java单例懒汉模式
  • Java中常用的设计模式之单例模式详解
    目录注意优点缺点使用场景一、实现方式二、实现方式三、测试总结注意 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 优点...
    99+
    2022-11-13
  • 一文详解Python中实现单例模式的几种常见方式
    目录Python 中实现单例模式的几种常见方式元类(Metaclass):装饰器(Decorator):模块(Module):new 方法:Python 中实现单例模式的几种常见方式...
    99+
    2023-03-22
    Python 单例模式 Python 单例
  • 单例模式在PHP框架中的扩展与定制
    【引言】单例模式是一种常见的设计模式,它保证类在整个应用程序中只能实例化一次。在PHP开发中,单例模式的应用非常广泛,特别是在框架的开发和扩展中。本文将介绍如何在PHP框架中扩展和定制单例模式,并提供具体的代码示例。【什么是单例模式】单例模...
    99+
    2023-10-21
    单例模式 PHP框架 扩展与定制
  • 举例讲解Python中的Null模式与桥接模式编程
    Null模式 我想每个人都有一种经历,为了获取某属性,但是有时候属性是None,那么需要你做异常处理, 而假如你想节省这样的条件过滤的代码,可以使用Null模式以减少对象是否为None的判断 python的...
    99+
    2022-06-04
    模式 桥接 Python
  • C++深入详解单例模式与特殊类设计的实现
    目录单例模式什么是单例模式应用场景优缺点实现饿汉模式懒汉模式特殊类设计设计一个类只能在堆上创建对象方法一方法二只能在栈上创建对象方法一方法二一个类不能被继承最后单例模式 什么是单例模...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作