当前位置: 首页 > news >正文

元类结合__new__

  • __new__:用来生成骨架

  • __init__:骨架添加血肉

【一】类中的__new__

class MyClass(object):def __init__(self,name,age):print(f"给当前MyClass类的对象初始化属性的时候会触发__init__")self.name = nameself.age = age
​def __call__(self,*args,**kwargs):print(f"当前 MyClass 类的对象被调用的时候会触发 __call__")return f'当前 MyClass 类 的 __call__ 的返回值 :>>>> {self.name}'
​# 【三】画骨架,有骨架才能上色def __new__(cls, *args, **kwargs):print(f"给当前 MyClass 类的对象创建骨架的时候会触发 __new__")# 当前类本身print(f" MyClass 类 的 __call__ 的 cls :>>>> {cls}")# <class '__main__.MyClass'>
​# 当前类初始化传的位置参数print(f" MyClass 类 的 __call__ 的 args :>>>> {args}")# ('knight',)
​# 当前类初始化传的关键字参数print(f" MyClass 类 的 __call__ 的 args :>>>> {kwargs}")# {'age': 18}
​# 【四】调用父类的object的new帮我搭骨架,将当前生成的骨架返回obj = object.__new__(cls)# 查看当前返回值发现是一个对象;类型print(f"obj:{obj}")     # <__main__.MyClass object at 0x0000024E61B16830># 查看名称空间,发现是空的print(f"obj.__dict__:{obj.__dict__}")       # {}# 【五】调用自己的__init__方法 初始化属性obj.__init__(*args, **kwargs)# 【六】给自己的名称空间初始化属性print(f"obj.__dict__:{obj.__dict__}")       # {'name': 'knight', 'age': 18}# 返回生成的骨架return obj
​
​
# MyClass 相当于给你一张纸
# 【一】类() 调用 ---> 一定会触发 __init__ 初始化对象的属性 #  __init__  给你人体骨架上个色
# 【二】在调用  __init__  之前要调用 __new__  # __new__ 相当于将你人体的骨架搭建好
m = MyClass('knight',age=18)
​
print(m.name)      # knight

【二】元类中的__new__

class MyType(type):def __init__(cls,class_name,class_bases,class_name_space):super().__init__(class_name,class_bases,class_name_space)
​def __call__(self, *args, **kwargs):# 得到一个空的对象obj = super().__call__(*args,**kwargs)return obj
​# # 【三】画骨架,有骨架才能上色def __new__(cls, *args, **kwargs):print(f"给当前 MyType 类的对象创建骨架的时候会触发 __new__")# 给当前 MyType 类的对象创建骨架的时候会触发 __new__
​# 当前类本身print(f" MyType 类 的 __call__ 的 cls :>>>> {cls}")# <class '__main__.MyType'>
​# 当前类初始化传的位置参数print(f" MyType 类 的 __call__ 的 args :>>>> {args}")# ('knight',)
​# 当前类初始化传的关键字参数print(f" MyType 类 的 __call__ 的 args :>>>> {kwargs}")# {'age': 18}
​# 【四】寻求父类来帮助搭建骨架obj = type.__new__(cls, *args, **kwargs)print(f"obj:{obj}")     # <class '__main__.MyClass'>print(f"obj.__dict__:{obj.__dict__}")# obj.__dict__:{'__module__': '__main__', '__init__': <function MyClass.__init__ at 0x000001A0B7C32170>, '__call__': <function MyClass.__call__ at 0x000001A0B7C32200>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None}return obj
​
​
​
​
class MyClass(metaclass=MyType):def __init__(self,name,age):print(f"给当前MyClass类的对象初始化属性的时候会触发__init__")self.name = nameself.age = age
​def __call__(self,*args,**kwargs):print(f"当前 MyClass 类的对象被调用的时候会触发 __call__")return f'当前 MyClass 类 的 __call__ 的返回值 :>>>> {self.name}'
​
​
m = MyClass('knight',age=18)
​
print(m.name)      # knight

相关文章:

元类结合__new__

__new__:用来生成骨架 __init__:骨架添加血肉 【一】类中的__new__ class MyClass(object):def __init__(self,name,age):print(f"给当前MyClass类的对象初始化属性的时候会触发__init__")self.name nameself.age age ​def __call__(self,*args,**kwargs):pri…...

(C语言)队列实现与用队列实现栈

目录 1.队列 1.1队列的概念及结构 1.2 队列的实际应用联想 1.3队列的实现 2. 队列应用——队列实现栈 主要思路 1.队列 1.1队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进…...

字符画生成网站 ascii字符画

_____ / ___/__ ___ / /__/ _ \/ _ \ \___/ .__/ .__//_/ /_/ font推荐&#xff1a;1.Slant 2.Small 3.Small slant https://patorjk.com/software/taag/#pdisplay&fSmall%20Slant&tCpp https://www.kammerl.de/ascii/AsciiSignature.php https://asciia…...

【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类

标题&#xff1a;【C -&#xff1e; Cpp】由C迈向Cpp &#xff08;6&#xff09;&#xff1a;静态、友元和内部类 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 &#xff08;一&#xff09;静态成员 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…...

探索Playwright:Python下的Web自动化测试革命

在如今这个互联网技术迅速发展的时代&#xff0c;web应用的质量直接关系着企业的声誉和用户的体验。因此&#xff0c;自动化测试成为了保障软件质量的重要手段之一。今天&#xff0c;我将带大家详细了解一款在测试领域大放异彩的神器——Playwright&#xff0c;并通过Python语言…...

先有JVM还是先有垃圾回收器?很多人弄混淆了

是先有垃圾回收器再有JVM呢&#xff0c;还是先有JVM再有垃圾回收器呢&#xff1f;或者是先有垃圾回收再有JVM呢&#xff1f;历史上还真是垃圾回收更早面世&#xff0c;垃圾回收最早起源于1960年诞生的LISP语言&#xff0c;Java只是支持垃圾回收的其中一种。下面我们就来刨析刨析…...

关于 vs2019 c++20 规范里的一个全局函数 _Test_callable

&#xff08;1&#xff09;看名思议&#xff0c;觉得这个函数可以测试其形参是否是可以被调用的函数&#xff0c;或可调用对象&#xff1f; 不&#xff0c;这个名字不科学。有误导&#xff0c;故特别列出。看下其源码&#xff08;该函数位于 头文件&#xff09;&#xff1a; 辅…...

07-Fortran基础--Fortran指针(Pointer)的使用

07-Fortran基础--Fortran指针Pointer的使用 0 引言1 指针&#xff08;Poionter&#xff09;的有关内容1.1 一般类型指针1.2 数组指针1.3 派生类(type)指针1.4 函数指针 2 可运行code 0 引言 Fortran是一种广泛使用的编程语言&#xff0c;特别适合科学计算和数值分析。Fortran 9…...

日期差值,

日期差值 ac代码 #include<iostream> using namespace std; int ans0; int get(int n){int mon[14]{0,31,28,31,30,31,30,31,31,30,31,30,31};ans0;int m_dayn%100;int m_month(n/100)%100;int m_year(n/10000);ansm_day;while(m_month--){//加上月数if((m_year%40&…...

GMV ES6直流变频多联空调机组室外机工作原理

GMV ES6直流变频多联空调机组室外机工作原理如下&#xff1a; 内机为制冷模式运行时&#xff0c;室外机根据室内机的运行负荷需求启动运行&#xff0c;室外换热器作为系统的冷凝器&#xff0c;各制冷室内机的换热器并联作为系统的蒸发器&#xff0c;通过室内机的送回风循环实现…...

中国开源 AI 大模型之光-InternLM2

今天给大家带来 AI 大模型领域的国产之光 - InternLM2&#xff0c;在10B量级开源大模型领域取得了全球 Top 3 的成绩&#xff0c;仅次于 Meta 发布的 Llama-3&#xff0c;在国内则是第一名的存在&#xff01; 简介 InternLM2是由上海人工智能实验室和商汤科技联合研发的一款大型…...

【嵌入式开发】Arduino人机界面及接口技术:独立按键接口,矩阵按键接口,模拟量按键接口(基础知识介绍)

“生活总是让我们遍体鳞伤,但到后来,那些受伤的地方一定会变成我们最强壮的地方。” 🎯作者主页: 追光者♂🔥 🌸个人简介: 📝[1] CSDN 博客专家📝 🏆[2] 人工智能领域优质创作者🏆 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🌿[4] …...

element ui Tree树形控件

lazy 是否懒加载子节点&#xff0c;需与 load 方法结合使用 boolean 默认为falseload 加载子树数据的方法&#xff0c;仅当 lazy 属性为true 时生效 function(node, resolve)使用懒加载load不需要再使用data&#xff0c;利用resolve返回值即可注意&#xff1a;第一层的数据要写…...

AI 绘画神器 Fooocus 图生图:图像放大或变化、图像提示、图像重绘或扩充、反推提示词、生成参数提取、所需模型下载

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文讲述 Fooocus 的图生图功能&#xff0c;主要内容包括&#xff1a;图像放大或变化、图像提示、图像重绘或扩充、反推…...

yolov8 模型架构轻量化 | 极致降参数量

模型轻量化加速是深度学习领域的重要研究方向&#xff0c;旨在减小模型的体积和计算复杂度&#xff0c;从而提高在资源受限设备上的运行效率&#xff0c;模型参数量在轻量化加速中扮演着至关重要的角色。 首先&#xff0c;模型参数量直接决定了模型的复杂度和存储空间需求。随…...

uniapp 小程序低功耗蓝牙配网 ble配网 物联网

1.获取蓝牙列表 bleList.vue <template><view><button touchstart"startSearch">获取蓝牙列表</button><scroll-view :scroll-top"scrollTop" scroll-y class"content-pop"><viewclass"bluetoothItem&q…...

服务器防火墙有什么用防护策略

随着互联网的飞速发展&#xff0c;服务器的安全问题日益凸显。为了保护服务器免受网络攻击和恶意入侵的威胁&#xff0c;人们引入了防火墙的概念。服务器防火墙作为保护服务器的第一道防线&#xff0c;具有重要的作用。那么服务器防火墙有什么用&#xff1f; 首先&#xff0c;服…...

27.哀家要长脑子了!

目录 1.316. 去除重复字母 - 力扣&#xff08;LeetCode&#xff09; 2. 1209. 删除字符串中的所有相邻重复项 II - 力扣&#xff08;LeetCode 哎哟 烦死了 刚刚不小心退出又没保存 又要写一遍 烦死了 最近刷题不得劲啊 感觉这脑子没长一点 1.316. 去除重复字母 - 力扣&am…...

Redis实战—验证码登录注册

目录 基于Session Controller层 Service层 ServiceImpl层 ​编辑校验登录状态 ThreadLocal 登录拦截器 添加拦截器到Config Controller层实现 基于Redis ServiceImpl 新增刷新拦截器 添加拦截器到Config 基于Session Controller层 /*** 发送手机验证码*/PostMappi…...

对话机器人技术解说

一、RAG介绍 如何不通过微调模型来提高LLM性能&#xff0c;检索增强生成&#xff08;RAG&#xff09;是未来的发展方向。 Embedding&#xff1a;将文档的句子或单词块转换为数字向量。就向量之间的距离而言&#xff0c;彼此相似的句子应该很近&#xff0c;而不同的句子应该离…...

Bilibili-Evolved:视频播放卡顿解决方案:实现60fps流畅体验的智能优化方法

Bilibili-Evolved&#xff1a;视频播放卡顿解决方案&#xff1a;实现60fps流畅体验的智能优化方法 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 你是否曾在观看高清动画时遇到画面卡顿&…...

告别手动填表!用CANoe 11.0 (x64)模板快速创建DBC数据库(附Signal/Message避坑指南)

告别手动填表&#xff01;用CANoe 11.0 (x64)模板快速创建DBC数据库&#xff08;附Signal/Message避坑指南&#xff09; 在汽车电子开发领域&#xff0c;DBC数据库的创建往往是工程师们既熟悉又头疼的环节。面对动辄上百个信号的需求表&#xff0c;传统的手动创建方式不仅耗时费…...

Pixel Aurora Engine基础教程:Streamlit前端交互逻辑与后端diffusers集成

Pixel Aurora Engine基础教程&#xff1a;Streamlit前端交互逻辑与后端diffusers集成 1. 认识像素极光引擎 Pixel Aurora Engine是一款将AI图像生成与复古游戏美学完美融合的创意工具。它采用Streamlit构建前端界面&#xff0c;后端集成diffusers库实现稳定扩散模型的强大生成…...

保姆级教程:用ESP8266-01S和机智云固件,5分钟搞定智能硬件联网(附烧录软件下载)

5分钟极速上手&#xff1a;ESP8266-01S与机智云固件实战指南 当你想把一盏台灯变成手机可控的智能设备&#xff0c;或是让温湿度传感器数据实时上传云端时&#xff0c;ESP8266-01S这个小巧的Wi-Fi模块就是最佳选择。它价格低廉、功能强大&#xff0c;配合机智云的固件&#xf…...

拯救变砖的STM32:利用BOOT0/1组合实现三种烧录救机方案(含串口/JTAG异常处理)

STM32紧急救援指南&#xff1a;BOOT引脚组合的三种烧录方案与异常处理实战 引言&#xff1a;当STM32突然"变砖"时 深夜的实验室里&#xff0c;王工盯着眼前毫无反应的STM32开发板&#xff0c;额头渗出细密的汗珠——距离项目交付只剩12小时&#xff0c;核心控制程序却…...

smart-mqtt v1.5.4发布,认证能力大升级

smart-mqtt v1.5.4正式发布&#xff0c;此次版本聚焦企业级连接认证能力升级&#xff0c;推出全新高级认证插件&#xff0c;在高性能底座上补齐企业级接入能力&#xff0c;还公布了获取方式与未来规划。版本核心亮点v1.5.4重点通过advanced-auth-plugin让连接认证更适配企业真实…...

突破工厂建设瓶颈:FactoryBluePrints蓝图库带来的自动化生产革命

突破工厂建设瓶颈&#xff1a;FactoryBluePrints蓝图库带来的自动化生产革命 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints是戴森球计划的开源工厂蓝图…...

Aurix TC397内存不够用?三种方法教你手动指定变量到LMU或DSRR地址空间

Aurix TC397内存优化实战&#xff1a;精准分配变量到LMU与DSRR的三大策略 当你在Aurix TC397项目开发中遇到"PSPR空间不足"的报错时&#xff0c;那种突如其来的编译中断感就像赛车手在弯道突然失去动力。这款强大的多核微控制器虽然配备了PSRR、DSRR、DLMU、LMU等多…...

鸿蒙应用开发实战:手把手教你封装一个可复用的音乐播放器管理类(ArkTS版)

鸿蒙应用开发实战&#xff1a;构建高可复用的音乐播放器管理类&#xff08;ArkTS版&#xff09; 在鸿蒙应用开发中&#xff0c;音频播放功能是许多应用的核心需求。本文将深入探讨如何设计一个健壮、可复用的音乐播放器管理类&#xff0c;采用ArkTS语言实现&#xff0c;帮助开发…...

Janus-Pro-7B开发者案例:基于7860 Web UI构建内部AI知识助手

Janus-Pro-7B开发者案例&#xff1a;基于7860 Web UI构建内部AI知识助手 1. 项目背景与价值 企业内部知识管理一直是个头疼的问题。各种文档、图片、报告散落在不同系统中&#xff0c;员工想要快速找到需要的信息往往需要花费大量时间。传统的搜索工具只能基于文字匹配&#…...