028.Python面向对象_类补充_元类

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

Python面向对象_类&补充_元类
- 补充_元类
- 概念
- 类对象创建方式
- 元类查找机制
- 元类的应用场景
- 类的描述
补充_元类
概念
- 创建类对象的类,就是元类
- 理解:
- 1、对象是怎么产生的:对象是由类创建出来的
- 2、类是不是对象:类也是对象
- 3、类对象是不是可以由另外一个类创建出来:可以(元类)
- 示例
n = 10 print(n.__class__) # <class 'int'>s = 'abc' print(s.__class__) # <class 'str'>class Person:passp = Person() print(p.__class__) # <class '__main__.Person'>print('=' * 50)print(n.__class__.__class__) # <class 'type'> print(int.__class__) # <class 'type'>print(s.__class__.__class__) # <class 'type'> print(str.__class__) # <class 'type'>print(p.__class__.__class__) # <class 'type'> print(Person.__class__) # <class 'type'> - 图解

类对象创建方式
- 方式一
- 通过
class关键字声明 - Python解释器扫描到这一段代码,会根据类描述自动创建类对象
- 语法
class ClassName:# 类对象代码块pass - 示例
class Person:sex = '男'def eat(self, thing):print(self.name, f'用筷子吃{thing}')p = Person() p.name = '张三'print(p.name) # 张三 print(p.sex) # 男 p.eat('白菜') # 张三 用筷子吃白菜 - 方式二
- 通过
type函数手动创建 - 语法
var = type(name: str, bases: tuple[type, ...], dict:dict[str, Any], **kwargs)# var: 变量名,用于接收类对象 # name:类名(字符串类型) # bases:父对象(元组类型) # dict:用键值对存放类属性和类方法(字典类型) - 示例
def eat(self, thing):print(self.name, f'用筷子吃{thing}')xxx = type('Person', (), {'sex': '男', 'eat': eat})p = xxx() p.name = '张三'print(p.name) # 张三 print(p.sex) # 男 p.eat('白菜') # 张三 用筷子吃白菜 - 图解

元类查找机制
- 两种方式创建类对象,最终都是要通过元类来创建。但是并不是每一个类的创建都是通过
type这个元类来创建,而是有一个元类查找机制 - 利用元类查找机制,我们就可以通过指定类的元类来对类的创建过程进行干预
- 元类查找机制
- 创建一个类步骤
- 第一步:到自己的类描述中查找是否存在
__metaclass__属性标明元类- 如果有,则用标明的元类进行创建
- 第二步:到自己继承的父类里面查找父类是否存在
__metaclass__属性标明元类- 如果有,则用父类标明的元类进行创建
- 第三步:到模块内查找是否存在
__metaclass__属性标明元类- 如果有,则用模块级元类进行创建
- 第四步:前面三种元类都没有,则会找到
type元类进行创建
- 示例
# 模块级,通过__metaclass__属性指定元类 ccc __metaclass__ = cccclass Animal:# 父类级,通过__metaclass__属性指定元类 bbb__metaclass__ = bbbpassclass Person(Animal):# 自身级,通过__metaclass__属性指定元类 aaa__metaclass__ = aaapass - 图解

元类的应用场景
- 1、拦截类的创建
- 2、修改类
- 3、返回修改之后的类
- 后面详细讲解
类的描述
-
目的
- 方便李清逻辑思路
- 方便多人合作开发时的沟通
- 方便生成项目文档
- …
-
描述方式
- 类描述语法
class ClassName:"""关于这个类的描述:类的作用、构造函数等;类属性的描述Attributes:count:类型,作用"""count = 1def run(self, distance, step):"""关于这个方法的作用:param distance: 类型,参数的含义,是否有默认值:param step: 类型,参数的含义,是否有默认值:return: 返回值的类型,返回结果的含义"""print("这里是run方法的代码块")return distance / step - 查看类描述
help(ClassName) - 运行结果
class ClassName(builtins.object)| 关于这个类的描述:类的作用、构造函数等;类属性的描述| Attributes:| count:类型,作用| | Methods defined here:| | run(self, distance, step)| 关于这个方法的作用| :param distance: 类型,参数的含义,是否有默认值| :param step: 类型,参数的含义,是否有默认值| :return: 返回值的类型,返回结果的含义| | ----------------------------------------------------------------------| Data descriptors defined here:| | __dict__| dictionary for instance variables (if defined)| | __weakref__| list of weak references to the object (if defined)| | ----------------------------------------------------------------------| Data and other attributes defined here:| | count = 1
- 类描述语法
-
生成项目文档
-
方法1:使用内置模块(pydoc)
-
具体步骤
- 在cmd窗口执行命令
查看文档描述:python3 -m pydoc 模块名称(不带.py 后缀)启动本地服务浏览文档:python3 -m pydoc -p 端口号python3 -m pydoc -b生成指定模块html文档:python3 -m pydoc -w 模块名称(不带.py 后缀) -
方法2:使用第三方模块(Sphinx、epydoc、doxygen)
- 具体步骤在后面学习包和模块的时候进行详细讲解
-
示例
-
类描述代码(
06-classdesc.py)class ClassName:"""关于这个类的描述:类的作用、构造函数等;类属性的描述Attributes:count:类型,作用"""count = 1def run(self, distance, step):"""关于这个方法的作用:param distance: 类型,参数的含义,是否有默认值:param step: 类型,参数的含义,是否有默认值:return: 返回值的类型,返回结果的含义"""print("这里是run方法的代码块")return distance / step -
生成描述文档(只需要执行1、5即可)
-
1、打开
cmd,先切换到对应盘符,再使用cd 目录路径命令进入项目目录- 这里也可以直接鼠标右键py文件–open in – Terminal`

-
2、直接查看模块的描述文档
python -m pydoc 06-classdesc -
3、查看模块名称中包含指定关键字的模块
python -m pydoc -k 类 -
4、在本地机器上的给定端口上启动HTTP服务器,用浏览器查看类描述
python -m pydoc -p 1234-
在任意未使用的端口上启动HTTP服务器,并打开Web浏览器以交互方式浏览文档
python -m pydoc -b -

-

-

-
如果模块名称是中文,则会报错
-

-
-
5、将模块的HTML文档写到当前目录下的文件中
python -m pydoc -w classdesc- 通过指定目录名可以生成目录内所有模块的HTML文档
python -m pydoc -w 目录名\,需要将cmd的目录切换到上一级 
- 通过指定目录名可以生成目录内所有模块的HTML文档
-
-
cmd命令补充
python --help # 查看python3命令中的帮助文档 # 2023年10月,cmd直接输入python是执行python3,在之前是需要输入python3-b : issue warnings about str(bytes_instance), str(bytearray_instance)and comparing bytes/bytearray with str. (-bb: issue errors) -B : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x -c cmd : program passed in as string (terminates option list) -d : turn on parser debugging output (for experts only, only works ondebug builds); also PYTHONDEBUG=x -E : ignore PYTHON* environment variables (such as PYTHONPATH) -h : print this help message and exit (also --help) -i : inspect interactively after running script; forces a prompt evenif stdin does not appear to be a terminal; also PYTHONINSPECT=x -I : isolate Python from the user's environment (implies -E and -s) -m mod : run library module as a script (terminates option list)# 以脚本形式运行库模块(终止选项列表) -O : remove assert and __debug__-dependent statements; add .opt-1 before.pyc extension; also PYTHONOPTIMIZE=x -OO : do -O changes and also discard docstrings; add .opt-2 before.pyc extension -q : don't print version and copyright messages on interactive startup -s : don't add user site directory to sys.path; also PYTHONNOUSERSITE -S : don't imply 'import site' on initialization -u : force the stdout and stderr streams to be unbuffered;this option has no effect on stdin; also PYTHONUNBUFFERED=x -v : verbose (trace import statements); also PYTHONVERBOSE=xcan be supplied multiple times to increase verbosity -V : print the Python version number and exit (also --version)when given twice, print more information about the build -W arg : warning control; arg is action:message:category:module:linenoalso PYTHONWARNINGS=arg -x : skip first line of source, allowing use of non-Unix forms of #!cmd -X opt : set implementation-specific option. The following options are available: -
查看
pydoc模块帮助文档python -m pydoc -hpydoc <name> ...Show text documentation on something. <name> may be the name of a Python keyword, topic, function, module, or package, or a dotted reference to a class or function within a module or module in a package. If <name> contains a '\', it is used as the path to a Python source file to document. If name is 'keywords', 'topics', or 'modules', a listing of these things is displayed. # 显示某事的文本文档。<name>可以是Python关键字、主题、函数、模块或包的名称,也可以是对模块或包中的模块中的类或函数的带点引用。如果<name>包含'\',它将被用作要记录的Python源文件的路径。如果name是'keywords', 'topics'或'modules',则显示这些内容的列表。pydoc -k <keyword>Search for a keyword in the synopsis lines of all available modules.# 在所有可用模块的概要行中搜索关键字pydoc -n <hostname>Start an HTTP server with the given hostname (default: localhost).# 使用给定的主机名(默认:localhost)启动HTTP服务器。pydoc -p <port>Start an HTTP server on the given port on the local machine. Port number 0 can be used to get an arbitrary unused port.# 在本地机器上的给定端口上启动HTTP服务器。端口号0可用于获取任意未使用的端口。pydoc -bStart an HTTP server on an arbitrary unused port and open a Web browser to interactively browse documentation. This option can be used in combination with -n and/or -p.# 在任意未使用的端口上启动HTTP服务器,并打开Web浏览器以交互方式浏览文档。该选项可以与-n和/或-p组合使用。pydoc -w <name> ...Write out the HTML documentation for a module to a file in the current directory. If <name> contains a '\', it is treated as a filename; if it names a directory, documentation is written for all the contents.# 将模块的HTML文档写到当前目录下的文件中。如果<name>包含'\',则将其视为文件名;如果它命名一个目录,则为所有内容编写文档。
相关文章:
028.Python面向对象_类补充_元类
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...
cocos2d-x Android原生平台与Lua交互
版本: cocos2d-x 语言: C/Java/Lua 简介 cocos2d-x原生平台Android 接入第三方SDK, 需要了解LuaJavaBridge的使用。 它封装了用于Java和Lua的相互调用, 其调用通过C为中介,简要的流程: Lua调用Java: Lua -> C -> Java J…...
17个开源的Go语言博客和CMS解决方案
Go语言,也称为Golang,是一种为构建高效、可靠和可扩展软件而设计的开源编程语言。它于2007年在Google开发,现在广泛用于开发Web应用程序、网络工具和系统软件。 为什么使用基于Go的CMS解决方案? 这些优势使Go成为开发可扩展、高…...
Jenkins 执行远程shell脚本部署jar文件问题起不来
如图:最开始的时候没有加: source /etc/profile 这一行, run.sh里面的java -jar xxxx.jar 一直执行不来。 一开始以为是Jenkins执行退出后会kill一切它启动的进程,所以加了在run.sh里面加了export BUILD_IDdontKillMe࿰…...
CTF网络安全题目个人导航【持续更新】
CTF-WEB导航 WEBSQLRCE反序列化文件上传SSTIXXE综合 WEB SQL [SWPUCTF 2021 新生赛]sql - 联合注入 [SWPUCTF 2021 新生赛]easy_sql - 联合注入||报错注入||sqlmap [NSSRound#1 Basic]sql_by_sql - 二次注入布尔盲注||sqlmap [NISACTF 2022]join-us - 报错注入&无列名注入…...
Matlab导入log(或txt)文件,提取数据或其他信息
导入log(或txt)文件 先上代码: clc; clear; %数据导入 file1fullfile(文件路径, test1.log); % 导入文件test1.log f1fopen(file1); dt1textscan(f1,%s); %采用textscan 读取数据 %得到的dt1是元胞数组格式比如:有如下内容文件 导入…...
GNU和Linux的关系、 Linux的发行版本、CentOs和RedHat的区别
GNU和Linux的关系 其实,我们通常称之为的"Linux"系统,相对更准确的名称应该称为“GNU/Linux”系统! 一个功能完全的操作系统需要许多不同的组成部分,其中就包括内核及其他组件;而在GNU/Linux系统中的内核就…...
如何在STM32中实现TCP通信?
如何在STM32中实现TCP通信? TCP通信在计算机网络中扮演着重要角色,实现它需要兼顾硬件和软件因素。 硬件层面,某些STM32处理器内置了Ethernet MAC,这有利于简化网络通信的部署。若处理器缺乏内置MAC,需外接以太网控制…...
Docker安装、启动、管理ElasticSearch、ElasticSearch-heade、kibana
一、ElasticSearch 1.1.镜像拉取 docker pull elasticsearch:7.17.13 1.2.启动 docker run -d --name "容器名称" -e "ES_JAVA_OPTS-Xms512m -Xmx512m" -p 9200:9200 -p 9300:9300 elasticsearch:7.17.13启动后使用docker logs查看ES启动日志…...
ACDSee Photo Studio Ultimate 2024特别版(图片编辑器)
ACDSee Photo Studio Ultimate 2024是一款功能全面、易于使用的图像编辑和管理软件,为摄影师和设计师提供了强大的工具和功能。无论您是进行基本的图像优化还是进行复杂的创作,ACDSee Photo Studio Ultimate 2024都将成为您的得力助手。 软件下载&#x…...
MySQL 3 环境搭建 MySQL 5.7版本的安装、配置
MySQL5.7.43官网下载地址 MySQL :: Download MySQL Community Server 这里选5.7.43,Windows版本,然后点击Go to Download Page,下载msi安装包的版本 MSI安装包版本比ZIP压缩包版本的安装过程要简单的多,过程更加清楚直观&#x…...
多媒体应用设计师 第2章 多媒体信息处理及编辑技术
1.多媒体信息的种类与特点 视觉类:文字、图像、图形、视频、动画、其他(视频、符号表示的数值、图形表示的某种数据曲线、数据库的关系数据) 听觉类:波形声音、语音、音乐 多媒体信息特点: 多媒体是有格式的。 越接近…...
【算法系列 | 10】深入解析查找算法之—线性查找
序言 心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力,成为更好的自己! 今天第10讲,讲…...
获取操作系统信息服务器信息JVM信息cpu内存磁盘信息
1.添加依赖 <dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>5.6.0</version> </dependency>...
Android笔记(四)Activity之间传递可序列化的数据的优化处理
Activity之间传递可序列化的数据 Android应用开发会常常处理数据的序列化和传递。在Android中往往采用两种方式实现数据的可序列化:(1)实现java.io.Serializable接口(2)实现android.os.Parcelable接口。 将类定义为an…...
MySQL MVCC详细介绍
MVCC概念 MVCC(Multi-Version Concurrency Control) 多版本并发控制,是一种并发控制机制,用于处理数据库中的并发读写操作,它通过在每个事务中创建数据的快照,实现了读写操作的隔离性,从而避免了读写冲突和数据不一致的问题。 M…...
Element Plus阻止 el-dropdown、el-switch等冒泡事件
最近做vue3项目,使用Element Plus,又遇到坑了! 问题点:组件中遇到事件冒泡问题了,el-checkbox 中 change事件要求阻止冒泡,如下代码中要求点击checkbox时不调用li标签的show方法 <li click"show()">…...
Spring framework Day13:注解结合Java配置类
前言 前面我们管理 bean 都是在 xml 文件中去管理,本次我们将介绍如何在 Java 配置类中去管理 bean。 注解结合 Java 配置类是一种常见的 Spring 注入 Bean 的方式。通常情况下,开发人员会使用 Java Config 来定义应用程序的配置信息,而在 …...
彻底卸载自己安装的python
一.彻底卸载自己安装的python Python3 安装完后,在系统中不同目录下存在各种依赖关系,若需卸载,需要一步步无残留完全卸载干净。 删除Python 3.7 框架,打开终端,输入 sudo rm -rf /Library/Frameworks/Python.frame…...
ES相关面试问题整理
索引模板了解么 索引模板,一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。 模板定义…...
谷歌关键词优化具体要做什么?独立站新手必看的5条铁规
建站满60天,后台数据面板显示0笔订单。 访问谷歌站长控制台,过去28天曝光次数仅为12。一家售卖宠物玩具的独立站上线45天,上传200个商品页面。每页装填3句机器翻译英文。页面缺失买家真实评价,网页找不到1处猫咪啃咬耐用度测试图。…...
预上屏是什么鬼?KikaInputMethod 输入预测功能深度解析
文章目录预上屏的本质预上屏执行流程核心预上屏代码Enter 键确认上屏光标操作全集私有命令通信(sendPrivateCommand)物理键盘处理(onKeyDown)InputClient 关键接口速查踩坑记录写在最后用搜狗或者系统键盘打字时,打到一…...
OBS背景移除插件:从零到一的AI虚拟背景终极指南 [特殊字符]
OBS背景移除插件:从零到一的AI虚拟背景终极指南 🎬 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: …...
WCHUsbSerTest:串口批量自动化测试工具的原理、配置与生产实践
1. 项目概述:为什么我们需要一个专用的串口批量测试工具?在嵌入式硬件开发、工业控制或者物联网设备的生产线上,USB转串口芯片和模块是连接PC与目标设备最常用、最基础的桥梁。无论是给单片机烧录程序,还是与PLC、传感器进行数据交…...
从ADC采样到FFT分析:手把手教你用STM32F407的DSP库搞定频谱计算
从ADC采样到FFT分析:手把手教你用STM32F407的DSP库搞定频谱计算 在工业振动监测、音频信号处理和电源质量分析等场景中,频谱分析是理解信号特征的关键技术。STM32F407凭借其Cortex-M4内核和硬件FPU,配合CMSIS-DSP库,能够高效实现实…...
LabVIEW虚拟仪表开发:从图形化编程到工业测控系统实战
1. 虚拟仪表:从概念到实践的革新 作为一名在工业自动化领域摸爬滚打了十多年的硬件工程师,我经历过从纯硬件调试到软硬件结合的漫长过程。早期,面对一个复杂的测试系统,我们往往需要堆满一桌子的真实仪器——示波器、信号发生器、…...
嵌入式数据存储终极指南:5分钟快速上手FlashDB超轻量级数据库
嵌入式数据存储终极指南:5分钟快速上手FlashDB超轻量级数据库 【免费下载链接】FlashDB An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库 项目地址: https://gitcode.com/gh_mirrors/…...
3步掌握B站视频智能分析:BiliTools免费工具箱终极指南
3步掌握B站视频智能分析:BiliTools免费工具箱终极指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 你…...
告别软件切换!用uTools的超级面板和插件,5分钟搞定你的日常效率工作流
告别软件切换!用uTools的超级面板和插件,5分钟搞定你的日常效率工作流 你是否经常在多个软件之间来回切换,只为完成一个简单的任务?复制一段文字需要翻译,得先打开浏览器;截图后想提取文字,又要…...
别再死记硬背了!用Python写个语法分析器,帮你彻底搞懂英语非谓语动词
用Python构建英语非谓语动词分析器:从语法规则到代码逻辑 引言:当编程遇上英语语法 英语学习中最令人头疼的部分莫过于非谓语动词——那些不做谓语的动词形式,包括不定式、分词和动名词。传统学习方法要求死记硬背各种规则和例外,…...


