当前位置: 首页 > 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…...

基于STM32的太阳能热水器智能控制系统设计与实现

1. 项目概述&#xff1a;为什么用STM32做太阳能热水器&#xff1f;几年前&#xff0c;我接手了一个老家的太阳能热水器改造项目。那台老式设备&#xff0c;除了一个机械式的水温水位显示仪&#xff0c;几乎没有任何智能控制。夏天水温能飙到七八十度&#xff0c;烫得没法直接用…...

观察taotoken用量看板如何清晰展示各项目api调用明细

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察taotoken用量看板如何清晰展示各项目API调用明细 对于项目管理者而言&#xff0c;清晰掌握团队在大模型API上的资源消耗情况至…...

基于MCP协议构建Jira连接器:打通AI助手与项目管理的技术实践

1. 项目概述&#xff1a;当Jira遇上MCP&#xff0c;一个连接器如何重塑项目管理工具链如果你和我一样&#xff0c;长期在软件研发一线摸爬滚打&#xff0c;那么对Jira这个名字一定不会陌生。它几乎是敏捷开发、缺陷跟踪和项目管理的代名词&#xff0c;无数团队用它来规划冲刺、…...

ElevenLabs旁遮普语TTS突然失真?3步定位Gurmukhi Unicode变体(U+0A02/U+0A3C/U+0A4D)引发的音素错位故障

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs旁遮普文语音合成异常现象综述 ElevenLabs 目前官方文档明确标注支持旁遮普语&#xff08;Gurmukhi script, language code: pa&#xff09;&#xff0c;但在实际调用其 REST API 进行语音合…...

C++定时器实战:从线程轮询到时间轮算法的演进与选型

1. 定时器技术选型的核心痛点 当我们需要在C项目中实现定时任务调度时&#xff0c;最直观的做法可能就是直接开个线程轮询了。我刚开始做网络服务开发时也这么干过&#xff0c;结果上线后CPU直接飙到90%——这就是典型的"新手陷阱"。实际上&#xff0c;定时器的实现方…...

连锁品牌万店扩张的破局之道:用数字化营建体系,突破规模化瓶颈

在消费市场竞争日趋激烈的当下&#xff0c;连锁品牌的规模化扩张&#xff0c;早已不是 “砸钱就能跑通” 的简单命题。很多品牌手握充足资金&#xff0c;却在扩张到几十、上百家门店时陷入停滞&#xff1a;门店营建标准混乱、多项目统筹失控、资深项目经理一将难求&#xff0c;…...

LabelImg标注的YOLO格式txt坐标转换保姆级教程(附Python代码)

LabelImg标注的YOLO格式坐标转换实战指南&#xff1a;从原理到Python实现 在计算机视觉项目中&#xff0c;数据标注是模型训练前的关键步骤。LabelImg作为一款开源的图像标注工具&#xff0c;支持生成YOLO格式的标注文件。然而&#xff0c;许多开发者在实际应用中发现&#xff…...

8B模型做生物实验:实验步骤顺序不乱、剂量无幻觉|ICLR 2026

Thoth团队 投稿量子位 | 公众号 QbitAI人类研究员做实验&#xff0c;从来不是把几句步骤随手拼起来。一份真正可复现的实验protocol&#xff0c;需要明确每一步做什么、对什么对象操作、用什么参数&#xff0c;以及步骤之间的先后依赖。一旦顺序错了、剂量错了、对象错了&#…...

避开无感FOC的那些坑:我的STM32F103 SMO观测器调试心得与波形分析

避开无感FOC的那些坑&#xff1a;我的STM32F103 SMO观测器调试心得与波形分析 在无感FOC驱动开发中&#xff0c;观测器的调试往往是整个项目中最具挑战性的环节。当电机出现抖动、观测角度不准或启动失败时&#xff0c;如何快速定位问题并优化参数&#xff0c;成为工程师们必须…...

别再傻傻分不清了!Numpy里ndarray和array到底啥区别?新手避坑指南

别再傻傻分不清了&#xff01;Numpy里ndarray和array到底啥区别&#xff1f;新手避坑指南 刚接触Numpy的Python开发者&#xff0c;几乎都会在ndarray和array()这两个概念上栽跟头。明明看起来都能创建数组&#xff0c;为什么文档里一会儿用np.array()&#xff0c;一会儿又冒出个…...