Python语法进阶篇 --- 单例模式、魔法方法

Python语法进阶篇 --- 单例模式、魔法方法

🐹🐹🐹🐹🐹一只正在努力学习计算机技术的小仓鼠🐹🐹🐹🐹🐹



前置补充内容

  • 一个对象的实例化过程:首先执行__new__()创建对象,如果没有写__new__(),默认调用object里面的__new__(),返回一个实例对象,然后调用__init__()初始化对象。

    名称 方法级别 目的 作用
    new() 创建对象 1. 在内存中为对象分配空间;2. 返回对象的引用
    init() 实例 实例化对象 定义实例属性
    python 复制代码
    class Test(object):
    def __init__(self):
        print('这是__init__()方法')
    # __new__()是静态方法,形参里有cls,实参就必须传cls
    def __new__(cls, *args, **kwargs):
        print(cls)
        print('我是__new__()方法')
    
        # 重写__new__()一定要返回实例对象的引用,否则Python解释器得不到分配空间的对象引用,就不会调用__init__()方法
        return super().__new__(cls)
    
    te = Test()
    print('te:', te)

单例模式

  • 含义:单例模式是一种常用的软件设计模式,该模式的目的为确保一个类中只能存在一个实例。

  • 应用场景:回收站、音乐播放器、数据库连接池的设计等。

  • 优点:节省内存空间  缺点:多线程访问容易引发线程安全问题

  • 实现方法:重写__new__()函数

    python 复制代码
    class Singleton(object):
    	# 定义一个类属性,初始值为None,用来记录单例对象的引用
    	obj = None
    	# 重写new方法
    	def __new__(cls, *args, **kwargs):
    		# 如果类属性时None,把__new__()返回的对象引用保存进去
    		if cls.obj is None:
    			cls.obj = super().__new__(cls)
    		# 返回类属性中记录的对象引用
    		return cls.obj
    s1 = Singleton()
    print(s1)
    s2 = Singleton()
    print(s2)

魔法方法

  • 含义:在Python中,xxx()的函数叫做魔法方法,特指具有特殊功能的函数。
  1. doc():类的描述信息

    python 复制代码
    class Person(object):
        # 只能使用多行注释,单行注释无效
        """
            人类 - 类的描述信息
        """
        pass
    def sing():
        """
            唱歌
        """
        pass
    print(Person.__doc__)
    print(sing.__doc__)
  2. module():表示当前操作对象所在的模块

  3. class():表示当前操作对象所在的类

    python 复制代码
    # pytest.py
    class A(object):
    def smile(self):
        print('微笑函数')
    # main.py
    import test.pytest
    a = test.pytest.A()
    a.smile()
    print('module: ', a.__module__)
    print('class: ', a.__class__)
  4. str():对象的描述信息

    python 复制代码
    class B(object):
        string = '我是'
        # 如果类中定义了该方法,那么在打印对象时,默认输出该方法的返回值,也就是打印方法中return的数据
        def __str__(self):
            # 必须有返回值,并且一定是字符串类型
            return B.string + "字符串string"
    b= B()
    print(b)
  5. del():析构函数,在程序结束或者删除对象时被调用

  6. call():使一个实例对象成为一个可调用对象   callable()可以判断一个对象是否是可调用对象

    python 复制代码
    class C(object):
        def __call__(self, *args, **kwargs):
            print('这是__call__函数')
    c = C()
    print('可调用?%s' % callable(c))
    # 调用一个可调用的实例对象,其实就是在调用它的__call__()方法
    c()
相关推荐
love530love4 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
遇事不決洛必達4 小时前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
CryptoPP5 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫5 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
凌云拓界5 小时前
文件管理:让AI安全操作你的电脑 ——CogitoAgent开发实战(三)
javascript·人工智能·架构·开源·node.js
探物 AI5 小时前
把 MambaOut 塞进 YOLOv11:会有什么样的反应
python·yolo·计算机视觉
凌云拓界6 小时前
联网能力:让AI看见更广阔的世界 ——CogitoAgent开发实战(四)
javascript·人工智能·架构·node.js·创业创新
如竟没有火炬6 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠6 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Cosolar6 小时前
保姆级 CrewAI 教程:从零构建多智能体协作系统
人工智能·python·架构