元类到底多强大?一行代码实现全局唯一实例,你敢信?

第一章:元类与单例模式的神秘面纱

在Python的高级编程中,元类(Metaclass)与单例模式(Singleton Pattern)是两个强大而深邃的概念。它们不仅影响对象的创建方式,还深刻揭示了语言层面的设计哲学。

理解元类的本质

元类是“类的类”,它控制类的创建过程。Python中一切皆对象,类本身也是由元类实例化而来。默认情况下,类由type创建,但通过自定义元类,可以拦截类的定义、修改属性或注入逻辑。


class SingletonMeta(type):
    """自定义元类实现单例模式"""
    _instances = {}  # 存储已创建的实例

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            # 只有实例不存在时才创建
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

上述代码定义了一个元类SingletonMeta,它重写了__call__方法,在类实例化时检查是否已有实例存在,确保全局唯一性。

单例模式的应用场景

单例模式常用于管理共享资源,如数据库连接池、日志处理器或配置中心。其核心目标是确保一个类在整个程序生命周期中仅有一个实例。

  1. 定义一个使用SingletonMeta作为元类的类
  2. 调用构造函数多次,验证返回的是同一对象
  3. 通过id()函数确认内存地址一致性

class Database(metaclass=SingletonMeta):
    def connect(self):
        return "Connected to database"

# 测试单例行为
db1 = Database()
db2 = Database()
print(id(db1) == id(db2))  # 输出: True

元类与设计模式的结合优势

特性说明
控制力强元类可在类创建时动态修改行为
复用性高单例逻辑集中于元类,避免重复编码
透明性好使用者无需关心内部实现细节

第二章:深入理解Python元类机制

2.1 元类是什么:从类的类说起

在 Python 中,一切皆对象,类也不例外。既然类是对象,那它的类型是什么?答案是元类(metaclass)。
类的类:type 的双重身份
`type` 不仅能判断对象类型,还可动态创建类。例如:
MyClass = type('MyClass', (), {'x': 42})
obj = MyClass()
print(obj.x)  # 输出: 42
此处 `type` 作为元类,动态生成了 `MyClass`。所有类默认由 `type` 创建,包括自定义类。
元类的作用层级
对象 ← 实例化 ← 类 ← 实例化 ← 元类 这一链条揭示了 Python 类系统的本质结构。元类允许在类创建时控制其行为,如属性注入、接口验证等。
  • 普通对象由类实例化而来
  • 类本身是元类的实例
  • 默认元类是 type

2.2 type与metaclass:动态创建类的核心原理

Python中一切皆对象,类本身也是对象,而`type`正是创建类的“元类”。调用`type(name, bases, dict)`可在运行时动态构造新类。
type的三参数用法
MyClass = type('MyClass', (object,), {
    'x': 10,
    'greet': lambda self: f"Hello, {self.x}"
})
obj = MyClass()
print(obj.greet())  # 输出: Hello, 10
上述代码等价于使用class MyClass:定义。参数依次为:类名、父类元组、属性字典。
自定义metaclass
通过定义metaclass,可在类创建时自动修改行为:
  • 拦截类的定义过程
  • 自动添加方法或属性
  • 实现单例、注册模式等高级设计
函数作用
type(obj)获取实例的类型
type(name, bases, dict)创建新类

2.3 自定义元类的基本结构与语法解析

在Python中,自定义元类通过继承`type`实现,用于控制类的创建过程。其核心在于重写`__new__`或`__init__`方法。
基本语法结构
class Meta(type):
    def __new__(cls, name, bases, attrs):
        # 修改类属性或注入逻辑
        attrs['version'] = '1.0'
        return super().__new__(cls, name, bases, attrs)

class MyClass(metaclass=Meta):
    pass
上述代码中,`Meta`作为元类,在`MyClass`定义时自动触发。`__new__`接收四个参数:元类自身、类名、父类元组和属性字典,最终返回构建后的类对象。
关键执行流程
  • 解析类定义中的名称、基类和属性
  • 调用元类的__new__进行类对象构造
  • 执行__init__完成初始化(可选)

2.4 元类的调用流程与对象构建生命周期

在 Python 中,元类(Metaclass)控制类的创建过程,其调用发生在类定义被解释器解析时。元类通过继承 `type` 实现,重写 `__new__` 或 `__init__` 方法可干预类的构造。
元类的基本结构

class Meta(type):
    def __new__(cls, name, bases, attrs):
        print(f"Creating class {name}")
        return super().__new__(cls, name, bases, attrs)

class MyClass(metaclass=Meta):
    pass
上述代码中,Meta.__new__ 在 MyClass 创建前自动调用,参数分别为元类自身、类名、父类元组和属性字典。
对象构建生命周期阶段
  • 解析类定义时触发元类调用
  • 元类生成类对象并初始化
  • 实例化时通过 __call__ 触发 __new__ 与 __init__

2.5 使用元类控制类的行为:实战演示

在Python中,元类(metaclass)是创建类的“类”,它允许我们在类定义时动态修改其行为。通过自定义元类,可以实现字段验证、注册机制或API自动绑定。
定义基础元类

class VerboseMeta(type):
    def __new__(cls, name, bases, attrs):
        print(f"正在创建类: {name}")
        attrs['creation_log'] = f"{name} created at runtime"
        return super().__new__(cls, name, bases, attrs)
该元类在类创建时打印日志,并注入creation_log属性。__new__方法接收类名、父类和属性字典,返回构建后的类对象。
应用元类
  • 使用metaclass=VerboseMeta声明元类
  • 所有继承该元类的类将自动记录创建行为
  • 适用于插件注册、ORM模型解析等场景

第三章:单例模式的设计哲学与实现方式

3.1 单例模式的本质与应用场景分析

单例模式是一种创建型设计模式,其核心目标是确保一个类在整个应用程序生命周期中仅存在一个实例,并提供一个全局访问点。
实现原理与线程安全
在多线程环境下,需防止多个线程同时创建实例。Go 语言中可通过 sync.Once 实现懒加载的线程安全单例:
var once sync.Once
var instance *Singleton

type Singleton struct{}

func GetInstance() *Singleton {
    once.Do(func() {
        instance = &Singleton{}
    })
    return instance
}
上述代码中,once.Do 确保初始化逻辑仅执行一次,适用于配置管理、日志器等场景。
典型应用场景
  • 数据库连接池管理
  • 全局配置中心读取
  • 日志记录器实例共享
这些场景要求资源集中控制,避免重复创建开销,体现单例模式的核心价值。

3.2 常见单例实现方法对比(模块、装饰器、__new__)

在Python中,单例模式可通过多种方式实现,常见的包括模块级单例、装饰器和重写`__new__`方法。
模块级单例
Python模块天然具备单例特性,导入时仅初始化一次。
# config.py
class Config:
    def __init__(self):
        self.host = "localhost"

config = Config()  # 模块变量,全局唯一实例
该方式最简单,依赖Python的模块加载机制,无需额外逻辑控制。
使用__new__控制实例创建
通过重写`__new__`方法确保类仅创建一个实例:
class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance
首次调用时创建实例并缓存,后续直接返回,线程不安全需额外加锁。
装饰器实现
利用装饰器封装实例管理逻辑,提升复用性:
  • 可统一应用于多个类
  • 解耦单例逻辑与业务逻辑
  • 支持延迟初始化

3.3 元类实现单例的独特优势与底层逻辑

在Python中,元类(metaclass)提供对类创建过程的完全控制,使其成为实现单例模式的理想选择。通过重写元类的 `__call__` 方法,可以在实例化时拦截调用,确保全局唯一性。
元类控制类实例化流程

class SingletonMeta(type):
    _instances = {}
    
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

class Database(metaclass=SingletonMeta):
    def connect(self):
        print("Connected to database")
上述代码中,`SingletonMeta` 作为元类维护 `_instances` 字典,记录每个类的唯一实例。当多次调用 `Database()` 时,`__call__` 拦截请求并返回已创建实例。
对比传统实现的优势
  • 无需修改类内部逻辑,解耦单例机制与业务代码
  • 适用于继承体系,子类不会意外创建新实例
  • 在类定义时自动生效,避免运行时手动干预

第四章:基于元类的全局唯一实例实战

4.1 设计一个线程安全的元类单例

在高并发场景下,确保单例类的唯一性和初始化安全性至关重要。Python 中可通过元类(metaclass)控制类的创建过程,结合线程锁实现线程安全的单例模式。
元类定义与线程同步
使用 `threading.Lock` 防止多个线程同时创建实例,保证构造的原子性。
import threading

class ThreadSafeSingletonMeta(type):
    _instances = {}
    _lock = threading.Lock()

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            with cls._lock:
                if cls not in cls._instances:
                    cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]
上述代码中,`_lock` 确保首次实例化时的线程互斥;双重检查避免每次调用都加锁,提升性能。`_instances` 以类为键存储唯一实例,支持继承体系下的独立单例。
使用示例
class ConfigManager(metaclass=ThreadSafeSingletonMeta):
    def __init__(self):
        self.config = {"debug": False}
多个线程调用 `ConfigManager()` 将返回同一实例,且初始化仅执行一次,保障数据一致性与系统资源节约。

4.2 利用__call__拦截类实例化过程

在Python中,通过重写元类的`__call__`方法,可以拦截类的实例化过程。该方法在调用类创建实例时自动触发,执行顺序优先于`__new__`和`__init__`。
拦截机制原理
当类被调用(如 `obj = MyClass()`)时,实际是其元类的`__call__`方法被执行,从而控制实例的生成流程。

class Meta(type):
    def __call__(cls, *args, **kwargs):
        print("拦截实例化")
        instance = super().__call__(*args, **kwargs)
        return instance
上述代码中,`Meta`作为元类,在每次实例化时输出提示。`super().__call__`负责调用原生实例创建逻辑,确保对象正确生成。
应用场景
  • 实现更灵活的单例模式
  • 注入实例初始化前的校验逻辑
  • 实现对象缓存或池化机制

4.3 多继承环境下的单例兼容性处理

在多继承场景中,多个父类可能各自实现单例模式,导致子类初始化时出现实例冲突或多次创建。为确保全局唯一性,需采用元类控制实例生成逻辑。
元类统一管控
通过自定义元类拦截类的实例化过程,确保即使在复杂继承结构下也仅生成一个实例:

class SingletonMeta(type):
    _instances = {}
    
    def __call__(cls, *args, **kwargs):
        # 使用 cls 而非特定类名,支持继承链
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

class BaseA(metaclass=SingletonMeta): pass
class BaseB(metaclass=SingletonMeta): pass
class Derived(BaseA, BaseB): pass  # 共享同一元类机制
上述代码中,__call__ 方法通过 cls 作为键区分不同类的实例,避免跨类共享。每个继承该元类的类都独立维护其单例状态,兼容多继承结构。
关键特性对比
机制线程安全继承透明性内存开销
元类控制高(可加锁)强低
装饰器实现中弱中

4.4 实际案例:数据库连接池中的元类单例应用

在高并发系统中,数据库连接的频繁创建与销毁会带来显著性能开销。通过元类实现单例模式,可确保连接池全局唯一,避免资源浪费。
元类定义单例行为

class SingletonMeta(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]
该元类重写了 __call__ 方法,在类实例化时检查是否已存在实例,若无则创建并缓存,保证全局唯一性。
连接池集成单例模式

class DatabasePool(metaclass=SingletonMeta):
    def __init__(self):
        self._connections = []
        self._max_size = 10
DatabasePool 使用 SingletonMeta 作为元类,确保系统中仅存在一个连接池实例,统一管理数据库连接资源。

第五章:元类的强大边界与使用建议

理解元类的适用场景
元类并非日常开发中的常用工具,但在构建框架或实现高级抽象时极具价值。例如,在 Django 的 ORM 中,元类用于在模型类创建时自动处理字段绑定与元数据配置。

class ModelMeta(type):
    def __new__(cls, name, bases, attrs):
        # 自动注册所有声明的字段
        fields = {k: v for k, v in attrs.items() if isinstance(v, Field)}
        attrs['_fields'] = fields
        return super().__new__(cls, name, bases, attrs)

class Model(metaclass=ModelMeta):
    pass
避免滥用元类的实践准则
  • 优先使用装饰器或类继承实现功能,而非直接引入元类
  • 当逻辑复杂度上升时,确保添加充分的单元测试覆盖元类行为
  • 在团队协作项目中,需通过文档明确说明元类的作用机制
性能与可维护性权衡
元类在类创建阶段介入,可能影响模块加载速度。以下对比展示了普通类与使用元类的初始化开销:
模式类数量平均加载时间 (ms)
标准类100012.3
含元类100047.8
调试元类的实用技巧
利用 __prepare__ 方法返回有序字典,可保留属性定义顺序,便于调试字段注册逻辑:

class OrderedMeta(type):
    @classmethod
    def __prepare__(metacls, name, bases):
        return dict()  # 可替换为 OrderedDict 调试定义顺序
【Python】深入探索Python元类:动态生成类与对象的艺术 元类是Python中一个高级且强大的特性,允许开发者在类的创建过程中插入自定义逻辑,从而动态生成类和对象。本文将全面介绍Python中的元类概念,深入探讨如何使用`type`和`__metaclass__`来动态生成类。通过详细的代码示例和中文注释,本文将展示元类在实际开发中的应用,包括类属性的自动注册、方法的动态添加、类实例的控制等。我们还将解析元类的工作机制,讨论其在设计模式中的应用,并探讨元类与装饰器、继承等高级特性的结合使用。通过本篇文章,读者将全面掌握Python元类的使用方法,提升代码的灵活性和 阅读详情

相关推荐

使用Python的元类实现AOP监控类方法调用过程

引言 Python的元类(metaclass)功能强大,能够实现AOP(Aspect-Oriented Programming,面向切面编程)的类似功能,本文以实现监控类方法执行所耗时间为例,参照本文,可以实现记录类方法调用参数和执行结果到日志文件中,统一增加类的方法或属性等看似“不可能”的事情而不用对其它类做修改,达到“高内聚,低耦合”的目的。 什么是元类(metaclass)

thomashtq的专栏 1565

Python元类和新型类-对象是类的实例,那类又是谁的实例?

既然对象是以类为模板生成的,那么类又是以什么为模板生成的? 元类具有动态改变类的能力,给编程带来了更方便的动态性和能力。 新型类相比于传统类,支持更多特性和机制,有更多的弹性。......

有一分热,发一分光。 6653

二维卡尔曼滤波位置,速度融合

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

Johnlee2019的博客 8451

一行Python代码到底有多强大?

Python、AI、大数据,请关注微信公众号七步编程! Python是一门非常简洁而优美的编程语言,在其他编程语言中需要繁琐的代码逻辑才能完成的事情,往往在Python中一行就可以解决。 这样,它不仅可以减少开发工作量,还能够大大提升可读性,避免在开发复杂逻辑过程中造成的失误。 本文,就来给大家介绍10个一行代码到底有多强大! 1. 交换变量 如果大学学过C/C++编程课的同学,对于交换变量一定不会陌生,这是最基础,也是非常常用的。 如果用C/C++实现交换变量,需要这样的操作: int a, b, c.

jakpopc的博客 921

宝塔面板添加站点及运营商SSL免费证书的申请与使用

本文详细介绍在宝塔面板下如何正确添加站点、配置站点,及在运营商如何申请免费SSL证书,将其配置到宝塔站点里。 给你的网站加一把锁,教你免费SSL证书申请,配置到自己的网站中。 环境:Ubuntu server 18 工具:宝塔控制面板 平台:阿里云 Web服务器:Nginx 宝塔:https://www.bt.cn/ 阿里云:https://www.aliyun.com/ 腾讯云:https://cloud.tencent.com/ 要求: 1.宝塔控制面板搭建完毕。 2掌握域名解析的原理。 3.了解ht

贺兰山长老 5058

死磕GMSSL通信-java/Netty系列(二)

Netty-tcnative再linux编译比较好编译,但是再window编译,我尝试了各种办法,总是编译失败,所以我采用半自动的方式进行编译,Netty-tcnative会生成临时文件,直接用vs打开,设置openssl的头文件和静态库路径,然后生成静态库,静态库改个名字放到jar包里边,其实自动编译也是这个原理哈哈O(∩_∩)O。直接传输五个证书的路径吗,之前有的是说要转成x509之类的,转来转去的有点麻烦,这个是直接传输证书路径,由底层gmssl去解析,格式必须是pem格式。然而,若项目已依赖于。

qq_36577699的博客 3025

python——元类、元类实现orm

元类 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object = ObjectCreator() >>> print(my_object) <__main_...

GC 6794

Moltbot 超详细安装使用教程(初学者版)

你在外面逛街,用微信/Telegram 发消息说"帮我查一下明天的天气"它立刻帮你查好并回复你说"帮我在电脑上新建一个文件夹叫'工作文档'"它真的帮你在电脑上创建了这就是 Moltbot ——一个能真正帮你干活的 AI 助手。API Key 就像是一把"钥匙",让 Moltbot 能够使用 AI 服务。

weixin_51040479的博客 2014

实例对象类对象元类流程图

大家都熟悉这个图,但是初学者,有些关系对应不上。我用打印的方式,直接填到九宫格中,帮助大家理解。

opentogether的博客 1174

【虚幻引擎】UE4初学者系列教程基础篇-全中文新手入门教程(UE5系列继续更新)

菜单栏菜单栏当中有文件、编辑、窗口帮助。文件当中可以进行一个关卡的新建、关卡的打开、关卡的保存还有就是打包项目,(项目大于关卡,项目里面可能有几百个关卡),这是比较常用的几个,这里可以看到打包当中有安卓端HTML5端,IOS端linux,还有就是TVOS(苹果电视)、windows的一些端口的一些设置。还可以打开最近打开的项目。关卡编辑器:工具栏3.3 “模式”面板保存所有:ctrl+shift+s(有的软件截屏也是这个按键需要注意)3.4 “内容浏览器”面板缩放:ctr+鼠标滚轮3.5.视口面板。

qq_45206556的博客 2万+

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3842

Python 类的元编程-元类metaclass

元编程(Metaprogramming)是指编写可以操作、修改或生成代码的代码。在 Python 中,元编程是一种非常强大的工具,允许在运行时动态创建类、修改类的行为,甚至在代码执行过程中改变对象的结构。特别是在面向对象编程中,类的元编程提供了对类定义、继承和行为的精细控制。本文将深入探讨 Python 中的类的元编程,介绍类的元编程的基本概念、常见的元编程技术,以及如何通过元类(metaclass)来实现这些功能。

2065

先进封装类别分析与典型案例

当制程微缩逼近物理极限、单颗大芯片(reticle limit)面积受限于光罩尺寸,且逻辑、存储、射频、传感等功能无法用同一套工艺最经济地制造时,性能增益的来源从 "晶体管密度" 转向 "互连密度"。先进封装的本质,是在芯片外部用更短、更密、更宽的路径把多个裸 die(die)互连起来,换取更高带宽、更低延迟、更小体积和异构集成能力。行业通常按划分为 2D、2.5D、3D、扇出、SiP 五大谱系,Chiplet/UCIe 则是贯穿其上的设计方法论,玻璃基板、共封装光学(CPO)是正在成型的新分支。

0 32

Python 单例模式:确保类的实例唯一

单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这在很多情况下非常有用,例如,当你需要在整个应用程序中共享一个资源,如数据库连接、配置对象或者日志记录器时。如果有多个实例存在,可能会导致资源浪费、数据不一致或者逻辑错误等问题。Python 中的单例模式是一种非常有用的设计模式,它可以确保一个类只有一个实例,并提供一个全局访问点。通过多种实现方式,如使用模块级变量、__new__方法、装饰器或者元类等,可以根据不同的需求和场景来选择合适的实现方式。

liuhailong0511的博客 1245

部署模型:Libtorch使用笔记【Pytorch的C++版本】【把用Pytorch训练好的模型打包保存为.pt格式,使用Libtorch去加载.pt格式模型,在C++工程中去用就好了】

A : Libtorch是pytorch的C++版本,现在的很多大型项目都是用C++写的,想使用训练好的模型,需要通过caffe等方式去集成,比较麻烦。这里pytorch官方提出了Libtorch,我们就可以把pytorch训练好的模型,打包起来,直接在C++工程中去用就好了,相比较caffe等,非常方便!虽然对于许多需要动态性和易迭代性的场景来说,Python是一种合适且首选的语言,但在同样的情况下,Python的这些特性恰恰是不利的。生产环境是一个需要低延迟和有严格部署要求的领域,一般选择C++。

u013250861的博客 2949

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Python究竟有多强大 Python代码能实现哪些功能

python究竟有多强大?Python代码能实现哪些功能?众所周知,Python入门简单、功能强大,是人工智能时代最佳的编程语言。但很多人好奇Python究竟有多强大,为什么那么受欢迎?下面就来给大家揭晓答案,看一下一行Python代码究竟能实现哪些功能! 1、九九乘法表 print( .join([ .join([ %s*%s=%-2s % (y, x, x*y) for y ...

874

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Python】元类(metaclass):定义类的类,控制类的创建和行为

在 Python 中,元类(metaclass) 是一种高级特性,用于控制类的创建和行为。简单来说,元类是“类的类”,即定义类如何被创建的模板。理解元类需要先了解 Python 的对象模型:类本身是对象,而元类是创建这些类对象的“工厂”。Python 中元类通过 metaclass 关键字指定,默认元类是 type。元类允许你在类定义时干预类的创建过程,例如修改类属性、方法、继承关系,甚至动态生成类。元类通常继承自 type,并重写以下方法:__new__、__init__、__call__。抽象基类元类:

彬彬侠的博客 1576

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深刻理解Python中的元类(metaclass)以及元类实现单例模式

来自:深刻理解Python中的元类(metaclass)以及元类实现单例模式 - 苍松 - 博客园在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩;在看python cookbook中关于元类创建单例模式的那一节有些疑惑。因此花了几天时间研究下元类这个概念。通过学习元类,我对pythttps://www.cnblogs.com/tkqasn/p/6524879.html 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩;在看python cookbook中关于元类创建单

eli的博客 691

Python元类:我如何让所有类的实例化,都必须经过我的“出生登记处”?

Python编程中,对象是程序的基本单元,而对象是通过实例化类来创建的。通常,类的实例化过程是透明的:我们调用类名,传入参数,得到一个实例。但在某些场景下,我们希望对实例的创建过程进行集中管理和监控。

王同学的博客 416

Python元类的使用场景

Python高级编程之元类

曲折旅程,艰难人生 1035

Python中的元类及元类实现的单例模式

https://www.cnblogs.com/tkqasn/p/6524879.html 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩;在看python cookbook中关于元类创建单例模式的那一节有些疑惑。因此花了几天时间研究下元类这个概念。通过学习元类,我对python的面向对象有了更加深入的了解。这里将一篇写的非常好的文章基本照搬过来吧,这是一篇在Stack overflow上很热的帖子,我看http://blog.jobbole.com/21351/这篇博客对其进行了翻译。

u013238956的博客 397

Python 单例模式与元类:提升代码质量的关键技术

"""元类:用于拦截并且加工类的创建type作用1.获取对象的类型2.创建一个新类型(元类)第一个参数是类名第二个参数是父类列表第三个参数是类拥有的内容"""class A:passmya = type("A",(object,),{"__doc__":"通过type手动创建"})temp = {}else:pass通过元类实现了将所有属性名转为小写,以及实现了单类。单例模式和元类是 Python 中强大的工具,它们分别解决了对象实例化和类创建过程中的特定问题。

博客简介 1270

元类

1、什么是元类 一切源自于一句话:python中一切皆为对象 元类就是用来实例化产生类的类 关系:元类—实例化---->类(People)—实例化---->对象(obj) class People: def __init__(self,name,age): self.name=name self.age=age def say(self...

weixin_46466247的博客 197

python一行代码有什么用_一行Python代码到底有多强大?

Python是一门非常简洁而优美的编程语言,在其他编程语言中需要繁琐的代码逻辑才能完成的事情,往往在Python中一行就可以解决。这样,它不仅可以减少开发工作量,还能够大大提升可读性,避免在开发复杂逻辑过程中造成的失误。本文,就来给大家介绍10个一行代码到底有多强大!1. 交换变量如果大学学过C/C++编程课的同学,对于交换变量一定不会陌生,这是最基础,也是非常常用的。如果用C/C++实现交换变量...

weixin_39669202的博客 124

python3一行代码到底有多强大?

我们先看看下面这几个例题,感受一下! 例题1、打印大写字母、小写字母 大写字母: 常规写法: upper="" for i in range(65,91): print(chr(i),end="") 一行代码: 注意:多取一位的时候是因为这里是开区间,最后一位取不上,所以一般多取一位。 print("".join(chr(i) for i in range(65,91))) 小写字母: 常规写法: lower="" for i in range(97,123): print(chr(i),end=

后街女孩的博客 831
上一篇: Python字典推导式性能优化指南(仅限高级开发者的3个隐藏技巧)
下一篇: 【企业级Django架构秘籍】:构建多源用户登录系统的底层逻辑
FastCompile
博客等级 码龄1年 164粉丝 2015原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值