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

如何动态的创建类?type的其他用法?什么是元类,如何自定义元类?

1、python中一切都是对象,类也不例外,type是object的子类,是创建类的类。

如何动态的创建一个类?

  • 用脚丫子创建
  • 用脑子创建
  • 不会
  • 不知道什么事动态类
大家可能会有一堆的疑惑,是的我也是有很多疑惑那让我们一起来探个究竟,请看如下的例子:
def create_cls(class_name):if classname == 'app':class App:name = "abc"def __str__(self):retuen "app"return Appelse classname == 'web':class Web:def __str__(self):return "web"return Webif __name__ == "__main__":meclass = create_cls('web')obj = meclass()  # 这样我们就实现了动态的创建类,
# 通过在函数create_cls中输入不同的class_name 来创建不同的类print(obj)

当然以上的方法虽然能实现我们的目的,但是看起来很Low,对不对?

  • 是的,糟糕透了
  • 看起来还可以嘛
  • 非常不错了
  • 哈哈哈
    那么还有更好的方法吗?让我们一起来探索一下。

2、本文第一点中提到,type是创建类的类,那么,让我们看一下type是怎么动态创建类的?

这里提示一下,当我们想了解python的类或函数用法时,第一选择就是用pyCharm中的Ctrl+鼠标点击类或函数,进行查看,查看注释去了解类的用法和作用。实在看不懂在百度呗

(1)先查看type下__init__中的注释
(2)上手

# App = type("App", (), {})
# 参数解析
# 1、第一个参数是类的名字
# 2、第二个参数是tuple类型,是我们创建的这个类所要继承的基类(这里没有要继承的所以为空)
# 3、第三个参数是dict类型,是所创建类的属性,(这里我们没有属性,留空)
if __name__ == "__main__":App = type("App", (), {})mecls = App()print(mecls) # 打印后看到是main模块下的App类扩展,添加一个属性,等同于第一点中的App下的nameApp = type("App", (), {"name": "abc"})mecls = App()print(mecls.name) # 打印name属性 

(3)疑问来了,这样创建的类怎么给他添加函数呢?
请看下边。。。。


def first:return "my name is first"if __name__ == "__main__":App = type("App", (), {"name": "abc", "first": first}) # 注意这里是函数的名称mecls = App()print(mecls.first())   # 打印调用的函数,返回 my name is first

(4)那么我想继承其他类的,该怎么操作?


def first:return "my name is first"#创建基类
class Basedef zero:return "I am Base"if __name__ == "__main__":App = type("App", (Base, ), {"name": "abc", "first": first}) # 将基类名称放到括号中,并且记得加逗号,因为是元组mecls = App()print(mecls.zero())   # 打印调用的函数,返回 I am Base

3、什么是元类,如何自定义元类

(1)元类是一种创建类的类,我们的type就是元类。type > class > 对象, class也是对象。

待补充。。。。。

相关文章:

如何动态的创建类?type的其他用法?什么是元类,如何自定义元类?

1、python中一切都是对象,类也不例外,type是object的子类,是创建类的类。 如何动态的创建一个类? 用脚丫子创建 用脑子创建 不会 不知道什么事动态类 大家可能会有一堆的疑惑,是的我也是有很多疑惑那让我们一起来探个…...

XCP实战系列介绍15-XCP故障排查指导

本文框架 1.概述2. 通过调试器排查2.1 打开Det功能2.2 如何确定Det ErrorCode3. 通过XCP应答报文排查3.1 FE报文组成及故障码对应关系3.2 举个例子1.概述 前面几篇文章我们介绍了基于Davinci开发工具的XCP配置指导,配好了,代码也生成了,但是程序一定能正常跑起来吗?就算软…...

吉林大学软件需求分析与规范(Software Requirements Analysis Specification)

chapter0课程简介:◼ 软件工程专业核心课程之一◼ 软件工程课程体系最前端课程◼ 主要内容:需求的基本概念,需求的分类,需求工程的基本过程,需求获取的方法、步骤、技巧,需求分析和建模技术,需求…...

PyTorch - Conv2d 和 MaxPool2d

文章目录Conv2d计算Conv2d 函数解析代码示例MaxPool2d计算函数说明卷积过程动画Transposed convolution animationsTransposed convolution animations参考视频:土堆说 卷积计算 https://www.bilibili.com/video/BV1hE411t7RN 关于 torch.nn 和 torch.nn.function t…...

leetcode Day2(昨天实习有点bug,心态要崩了)

int carry 0;for(int i a.size() - 1, j b.size() - 1; i > 0 || j > 0 || carry; --i, --j) {int x i < 0 ? 0 : a[i] - 0;int y j < 0 ? 0 : b[j] - 0;int sum (x y carry) % 2;carry (x y carry) / 2;str.insert(0, 1, sum 0);}return str;加一&a…...

另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate

以下内容转载自&#xff1a;https://segmentfault.com/a/1190000018472572 作者&#xff1a;scherman 因为项目需要选择数据持久化框架&#xff0c;看了一下主要几个流行的和不流行的框架&#xff0c;对于复杂业务系统&#xff0c;最终的结论是&#xff0c;JOOQ是总体上最好的…...

LeetCode 338. 比特位计数

给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;[0,1,1] 解释&#xff1a; 0 --> 0 1 --> …...

排序评估指标——NDCG和MAP

在搜索和推荐任务中&#xff0c;系统常返回一个item列表。如何衡量这个返回的列表是否优秀呢&#xff1f; 例如&#xff0c;当我们检索【推荐排序】&#xff0c;网页返回了与推荐排序相关的链接列表。列表可能会是[A,B,C,G,D,E,F],也可能是[C,F,A,E,D]&#xff0c;现在问题来了…...

[Android Studio] Android Studio Virtual Device(AVD)虚拟机的功能试用

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f680;write…...

kafka-3-kafka应用的核心要点和内外网访问

kafka实战教程(python操作kafka)&#xff0c;kafka配置文件详解 Kafka内外网访问的设置 1 kafka简介 根据官网的介绍&#xff0c;ApacheKafka是一个分布式流媒体平台&#xff0c;它主要有3种功能&#xff1a; (1)发布和订阅消息流&#xff0c;这个功能类似于消息队列&#x…...

VS2017+OpenCV4.5.5 决策树-评估是否发放贷款

决策树是一种非参数的监督学习方法&#xff0c;主要用于分类和回归。 决策树结构 决策树在逻辑上以树的形式存在&#xff0c;包含根节点、内部结点和叶节点。 根节点&#xff1a;包含数据集中的所有数据的集合内部节点&#xff1a;每个内部节点为一个判断条件&#xff0c;并且…...

Prometheus 记录规则和警报规则

前提环境&#xff1a; Docker环境 涉及参考文档&#xff1a; Prometheus 录制规则Prometheus 警报规则 语法检查规则 promtool check rules /path/to/example.rules.yml一&#xff1a;录制规则语法 groups 语法&#xff1a; groups:[ - <rule_group> ]rule_group…...

(API)接口测试的关键技术

接口测试也就是API测试&#xff0c;从名字上可以知道是面向接口的测试活动。所以在讲API测试之前&#xff0c;我们应该说清楚接口是什么&#xff0c;那么接口就是有特定输入和特定输出的一套逻辑处理单元&#xff0c;而对于接口调用方来说&#xff0c;不用知道自身的内部实现逻…...

快速排序算法原理 Quicksort —— 图解(精讲) JAVA

快速排序是 Java 中 sort 函数主要的排序方法&#xff0c;所以今天要对快速排序法这种重要算法的详细原理进行分析。 思路&#xff1a;首先快速排序之所以高效一部分原因是利用了离散数学中的传递性。 例如 1 < 2 且 2 < 3 所以可以推出 1 < 3。在快速排序的过程中巧…...

linux环境搭建私有gitlab仓库

搭建之前&#xff0c;需要安装相应的依赖包&#xff0c;并且要启动sshd服务(1).安装policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]# sudo yum install -y curl policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]…...

SpringSecurity授权

文章目录工具类使用自定义失败处理代码配置跨域其他权限授权hasAnyAuthority自定义权限校验方法基于配置的权限控制工具类 import javax.servlet.http.HttpServletResponse; import java.io.IOException;public class WebUtils {/*** 将字符串渲染到客户端** param response 渲…...

学习 Python 之 Pygame 开发坦克大战(一)

学习 Python 之 Pygame 开发坦克大战&#xff08;一&#xff09;Pygame什么是Pygame?初识pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音…...

2.5|iot冯|方元-嵌入式linux系统开发入门|2.13+2.18

一、 Linux 指令操作题&#xff08;共5题&#xff08;共 20 分&#xff0c;每小题 4分&#xff09;与系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等主题相关。1.文件1.1文件属性1.2文件类型属性字段的第1个字符表示文件类型&#xff0c;后9个字符中&#xff0c;…...

一起Talk Android吧(第四百九十六回:自定义View实例二:环形进度条)

文章目录 知识回顾实现思路实现方法示例代码各位看官们大家好,上一回中咱们说的例子是"如何使用Java版MQTT客户端",这一回中咱们说的例子是"自定义View实例二:环形进度条"。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 看官们,我们又回…...

上传图片尺寸校验

使用方法 ● Image ● URL ● onload代码&#xff1a; async validImageSize(file, imgWidth, imgHeight) {const img new Image()img.src URL.createObjectURL(file)const { w, h } await new Promise((resolve, reject) > {img.onload () > {const { width: w, he…...

自动化数据标注:OpenClaw+Qwen3.5-9B加速AI模型训练

自动化数据标注&#xff1a;OpenClawQwen3.5-9B加速AI模型训练 1. 数据标注的痛点与自动化机遇 作为一名长期奋战在机器学习一线的开发者&#xff0c;我深知数据标注环节的折磨。去年参与一个图像分类项目时&#xff0c;团队花费了整整三周时间手工标注5万张图片&#xff0c;…...

SAP SD不完整日志配置实战:从字段识别到测试全流程(含避坑指南)

SAP SD不完整日志配置实战&#xff1a;从字段识别到测试全流程&#xff08;含避坑指南&#xff09; 在SAP SD模块的实施与运维过程中&#xff0c;确保销售凭证数据的完整性是保障业务流程顺畅运行的基础。不完整日志功能作为数据质量的"守门人"&#xff0c;能够有效预…...

非线性奇异谱分解算法:精细化处理时间序列数据,提取CSV文件信号特征,生成希尔伯特谱分析报告

SSD–fft–hht&#xff0c;奇异谱分解算法&#xff0c;是对原始小波分解的一种改进&#xff0c;对小波分解中的高频部分进行二次分解&#xff0c;提高分辨率。 一种非线性时间序列分解方法&#xff0c;可用于处理各种复杂数据&#xff0c;包括金融&#xff0c;气候&#xff0c;…...

FPGA驱动EMMC:从Verilog模块到低成本大容量存储方案

1. 为什么选择FPGA驱动EMMC作为大容量存储方案 在数据采集项目中&#xff0c;存储方案的选择往往让人头疼。我做过不少类似项目&#xff0c;发现很多工程师第一反应就是上SATA或者PCIe NVMe固态硬盘。确实&#xff0c;这些方案存储容量大、带宽高&#xff0c;但实际用起来你会发…...

3分钟解决ROG笔记本色彩发白问题:G-Helper智能恢复指南

3分钟解决ROG笔记本色彩发白问题&#xff1a;G-Helper智能恢复指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...

团队协作中的Git分支管理:为什么我们最终放弃了Rebase?

团队协作中的Git分支管理&#xff1a;为什么我们最终放弃了Rebase&#xff1f; 当我们的技术团队从5人扩展到20人时&#xff0c;Git仓库的提交历史突然变成了需要考古学家破译的楔形文字。最初被Rebase的"整洁线性历史"吸引的我们&#xff0c;在经历三个月的实践后&a…...

别再只盯着日志了!利用RDP的.bmc缓存文件做Windows终端服务器取证(附Python工具链)

挖掘RDP客户端缓存&#xff1a;被忽视的Windows终端会话可视化取证新维度 当服务器日志被刻意删除或篡改时&#xff0c;安全人员往往陷入取证僵局。但很少有人意识到&#xff0c;每台连接过远程桌面的Windows电脑里&#xff0c;都藏着一种特殊的"视觉日志"——RDP位图…...

AIGlasses_for_navigation实际应用:为听障视障双重障碍者定制多模态反馈系统

AIGlasses_for_navigation实际应用&#xff1a;为听障视障双重障碍者定制多模态反馈系统 1. 项目背景与价值 在日常生活中&#xff0c;视障和听障人士面临着巨大的出行挑战。传统的盲杖虽然能提供基础的地面探测&#xff0c;但无法识别远处的障碍物、交通信号灯或特定地标。而…...

Java Stream 中间操作全解析:惰性求值、无状态与有状态操作详解

一、前言 Stream API是Java 8的灵魂特性之一,它彻底改变了集合操作的写法——告别嵌套循环、简化逻辑判断,让代码更简洁、更易读、更高效。 但很多开发者刚接触Stream时,都会陷入一个误区:写了一串中间操作,却发现程序没有任何执行效果。其实核心原因很简单:Stream的中…...

最全|OpenClaw 2026年阿里云部署方法,小白7分钟掌握

最全&#xff5c;OpenClaw 2026年阿里云部署方法&#xff0c;小白7分钟掌握。本文面向零基础用户&#xff0c;完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw&#xff08;Clawdbot&#xff09;的流程&#xff0c;包含环境配置、服务启动、Skills集成、阿…...