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的目录切换到上一级
      • 在这里插入图片描述
  • 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 -h

    pydoc <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>包含'\',则将其视为文件名;如果它命名一个目录,则为所有内容编写文档。
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【tomcat、java】

java&#xff1a;maven配置 1.安装插件 <build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port&…

一种重要的天然氨基酸L-Homopropargylglycine(HPG)|CAS:942518-19-6

产品简介&#xff1a;L-Homopropargylglycine是一种重要的天然氨基酸&#xff0c;具有多种生物活性和医学应用价值。它广泛应用于生物学、药学、化学等多个领域。在生物学中&#xff0c;HPG被用作蛋白质合成的标记物&#xff0c;可以通过其特殊的化学反应与蛋白质中的半胱氨酸残…

【SV中的多线程fork...join/join_any/join_none】

SV中fork_join/fork_join_any/fork_join_none 1 一目了然1.1 fork...join1.2 fork...join_any1.3 fork...join_none 2 总结 SV中fork_join和fork_join_any和fork_join_none; Note: fork_join在Verilog中也有&#xff0c;只有其他的两个是SV中独有的&#xff1b; 1 一目了然 1.…

操作系统 OS

本文章是学习《操作系统》慕课版 和 王道《2024年 操作系统 考研复习指导》后所做的笔记&#xff0c;其中一些图片来源于学习资料。 目录 概念&#xff08;定义&#xff09; 目标 方便性 有效性 可扩充性 开放性 作用 OS 作为用户与计算机硬件系统之间的接口 — 人机交…

仅用61行代码,你也能从零训练大模型

本文并非基于微调训练模型&#xff0c;而是从头开始训练出一个全新的大语言模型的硬核教程。看完本篇&#xff0c;你将了解训练出一个大模型的环境准备、数据准备&#xff0c;生成分词&#xff0c;模型训练、测试模型等环节分别需要做什么。AI 小白友好~文中代码可以直接实操运…

Puppeteer基础知识(一)

Puppeteer基础知识&#xff08;一&#xff09; Puppeteer基础知识&#xff08;一&#xff09;一、简介二、其他一些自动化测试工具三、安装与使用四、Puppeteer常用命令五、常见问题解决&#xff1a; 一、简介 Puppeteer 是一个强大而灵活的工具&#xff0c;可以用于网页爬虫、…

Transformer预测 | Pytorch实现基于Transformer 的锂电池寿命预测(CALCE数据集)

文章目录 效果一览文章概述模型描述程序设计参考资料效果一览 文章概述 Pytorch实现基于Transformer 的锂电池寿命预测,环境为pytorch 1.8.0,pandas 0.24.2 随着充放电次数的增加,锂电池的性能逐渐下降。电池的性能可以用容量来表示,故寿命预测 (RUL) 可以定义如下: SOH(t…

RTC 时间、闹钟

实时时钟RTC是一个独立的定时器。RTC模块拥有一个连续计数的计数器&#xff0c;在软件配置下&#xff0c;可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 在掉电情况下 RTC仍可以独立运行 只要芯片的备用电源…

实现协议互通:探索钡铼BL124EC的EtherCAT转Ethernet/IP功能

钡铼BL124EC是一种用于工业网络通信的网关设备&#xff0c;专门用于将EtherCAT协议转换成Ethernet/IP协议。它充当一个桥梁&#xff0c;连接了使用不同协议的设备&#xff0c;使它们能够无缝地进行通信和互操作。 具体来说&#xff0c;BL124EC通过支持EtherCAT&#xff08;以太…

2023,全网最真实的自动化测试学习路线,看不懂来打我!

随着测试行业的发展&#xff0c;“会代码”越来越成为测试工程师的一个标签。打开各大招聘网站&#xff0c;测试工程师月薪一万以上基本都有一个必备技能&#xff0c;那就是自动化测试。那么自动化测试到底难不难呢&#xff1f;下面我将会将我的经历讲给大家听&#xff0c;希望…

【java基础学习】之DOS命令

#java基础学习 1.常用的DOS命令&#xff1a; dir:列出当前目录下的文件以及文件夹 md: 创建目录 rd:删除目录cd:进入指定目录 cd.. :退回到上级目录 cd\ : 退回到根目录 del:删除文件 exit:退出dos命令行 1.dir:列出当前目录下的文件以及文件夹 2.md: 创建目录 …

[NewStarCTF 2023 公开赛道] week1 Crypto

brainfuck 题目描述&#xff1a; [>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<-]>>>>>>>.>----.<-----.>-----.>-----.<<<-.>>..…

黑豹程序员-架构师学习路线图-百科:AJAX

文章目录 1、什么是AJAX2、发展历史3、工作原理4、一句话概括 1、什么是AJAX Ajax即Asynchronous&#xff08;呃森可乐思&#xff09; Javascript And XML&#xff08;异步JavaScript和XML&#xff09; 在 2005年被Jesse James Garrett&#xff08;杰西詹姆斯加勒特&#xff09…

Android Studio新建项目缓慢解决方案

关于Android Studio2022新建项目时下载依赖慢的解决方案 起因解决方案gradle下载慢解决方案kotlin依赖下载慢解决方案 结尾 起因 新建Android Studio项目时&#xff0c;常会因为网络问题导致部分依赖下载缓慢&#xff0c;其中gradle和kotlin最拖慢进度。 解决方案 gradle下载…

1.3.OpenCV技能树--第一单元--图像的基础操作(进阶篇)

目录 1.文章内容来源 2.图像的进阶操作 2.1.边界填充 2.2.数值计算 2.3.图像融合 2.4.图像保存 2.5.视频读取 3.课后习题代码复现 3.1.问题一图像像素颜色 3.2.问题二图片黑客帝国化 3.3.问题三梅西的足球轨迹 4.易错点总结与反思 1.文章内容来源 1.题目来源:https://edu.c…

MySQL之主从复制

概述&#xff1a; 将主库的数据 变更同步到从库&#xff0c;从而保证主库和从库数据一致。 它的作用是 数据备份&#xff0c;失败迁移&#xff0c;读写分离&#xff0c;降低单库读写压力 原理&#xff1a; 主服务器上面的任何修改都会保存在二进制日志&#xff08; Bin-log日志…

【Zookeeper专题】Zookeeper经典应用场景实战(二)

目录 前置知识课程内容一、Zookeeper分布式锁实战1.1 什么是分布式锁1.2 基于数据库设计思路1.3 基于Zookeeper设计思路一1.4 基于Zookeeper设计思路二1.5 Curator 可重入分布式锁工作流程1.6 总结 二、基于Zookeeper实现服务的注册与发现2.1 设计思路2.2 Zookeeper实现注册中心…

GitHub相应太慢

后期使用到github下载源码&#xff0c;会发现响应太慢&#xff0c;本篇文章解决你的问题 获取域名对应的ip 访问链接&#xff1a;https://raw.hellogithub.com/hosts&#xff08;ps&#xff1a;这链接定时更新&#xff09;&#xff0c;获取对应的host配置。 如果需要工具自动…

百面机器学习书刊纠错

百面机器学习书刊纠错 P243 LSTM内部结构图 2023-10-7 输入门的输出 和 candidate的输出 进行按元素乘积之后 要和 遗忘门*上一层的cell state之积进行相加。

Linux常见指令3

Linux常见指令3 一.Linux指令1.时间相关的指令1.date指定格式显示时间2.时间戳3.补充内容-日志3.Cal 2.find补充1.which2.whereis 3.uname-a-r 4.重要的几个热键5.关机命令 二.grep-i选项-n选项-v选项grep其他用途1.搜索指定进程信息2.查找日志等级 补充命令补充命令:sort补充命…