Python 元类有什么用?

2024-04-27

元类可以用其他方式做不到的事情做什么?

Alex Martelli 表示,有些任务如果没有元类就无法完成Python 元类与类装饰器 https://stackoverflow.com/questions/1779372/python-metaclasses-vs-class-decorators我想知道是哪些?


如果你想要类对象(而不是实例类对象)配备了“特殊的定制行为”,因为对象的行为取决于对象上的特殊方法type对象的类型,而类对象的类型恰好是元类的同义词。

例如,如果您想要一个类对象 X 使得“print X”发出“时间现在是上午 8:46”(上午 8:46,或者更一般地说,当前时间),这必须意味着type(x)(又名X的元类)有一个特殊的定制__str__方法——类似地(使用各种适用的特殊方法)如果你想赋予诸如X + Y其中 X 和 Y 都是类对象,或者X[23](其中 X 再次是一个类对象),依此类推。

现在,大多数其他自定义任务(在 Python 2.6 或更高版本中)更容易使用类装饰器来实现,它可以在类装饰器结束后立即更改类对象。class陈述。还有一些情况是不可行的,因为如果要产生任何效果,必须尽早进行更改(例如,设置或更改__slots__).

在 Python 3 中,元类获得了一点额外的用处:元类现在可以选择指定在执行过程中要填充的映射对象。class语句的主体(默认情况下,这是一个普通的dict)。这允许order要保留和使用的类主体中的名称绑定(而正常的dict失去顺序),当类必须具有特定顺序的“字段”时(例如将 1:1 映射到 Cstruct、CSV 文件或数据库表中的一行等)——在 Python 2.* 中,必须重复指定(通常使用额外的类属性,该属性是序列,因此确实保留顺序),并且 Python 的此功能3 个元类允许删除冗余。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 元类有什么用? 的相关文章

  • 如何将自定义 CSS 添加到脆皮表单?

    我正在尝试在脆皮表单的帮助下为我的网站创建一个响应式表单 我没有使用引导程序 我想将自定义 CSS 添加到脆皮表单以匹配我的整个网站 HTML
  • Python:数百万个小文件的读写速度缓慢

    结论 看来 HDF5 是适合我的目的的方法 基本上 HDF5 是一种用于存储和管理数据的数据模型 库和文件格式 并且旨在处理令人难以置信的大量数据 它有一个名为 python tables 的 Python 模块 链接在下面的答案中 HDF
  • 由于 __init__ 构造函数而产生的 Pytest 集合警告

    我一直在使用 Pytest 和 Selenium Web 驱动程序自学测试自动化 我所有的测试函数都在一个名为测试网络 py 它位于名为的目录中tests 我将所有函数分开 并将它们放在一个名为的单独目录中的自己的文件中测试用例 例如 这就
  • Pandas 随机样本删除

    我知道DataFrame sample 但是我怎样才能做到这一点并从数据集中删除样本呢 注意 据我所知 这与替换采样无关 例如这里是精华我想要实现的目标 这实际上不起作用 len df 1000 df subset df sample 30
  • 如何获取 ndarray 的 x 和 y 维度 - Numpy / Python

    我想知道是否可以分别获取 ndarray 的 x 和 y 维度 我知道我可以使用ndarray shape获取表示维度的元组 但如何在 x 和 y 信息中分离它 先感谢您 您可以使用元组拆包 y x a shape
  • 在散景中隐藏轴

    如何在散景图中隐藏 x 轴和 y 轴 我已经根据此进行了检查和尝试 p1 figure visible None p1 select type Axis visible 0 xaxis Axis plot p1 visible 0 和喜欢h
  • 您可以使用 Openpyxl 将全名拆分为名字和姓氏吗?

    我有一个 Excel 文件 我一直在尝试使用 openpyxl 将列 全名 拆分为两个单独的名字和姓氏列 例如 我有 from openpyxl import Workbook load workbook wb load workboo p
  • Tensorflow无法分配设备进行操作

    我正在尝试跑步NVidia 脸部生成器演示 https github com tkarras progressive growing of gans在我的电脑上 我使用的是 Windows 10 我已经下载了源代码 并尝试按照页面下方的步骤
  • subprocess.Popen args 参数的最大长度是多少?

    我在用Popen http docs python org library subprocess html using the subprocess modulesubprocess 模块中的函数来执行命令行工具 subprocess Po
  • Python:如何使用 struct.pack_into 将不同类型的数据打包到字符串缓冲区中

    我正在尝试将一些无符号 int 数据打包到使用创建的字符串缓冲区中ctypes create string buffer 这是以下代码段 以及显示错误的运行示例在键盘上 http codepad org S8nUWMcW import st
  • matplotlib 的上限/下限

    我想用误差线绘制一些数据点 其中一些数据点只有上限或下限 而不是误差线 所以我尝试使用索引来区分带有误差条的点和带有上限 下限的点 但是 当我尝试这样的事情时 errorbar x i y i yerr ymin i ymax i 我收到错
  • python seaborn:按色调显示 alpha

    在seaborn中 色调为组设置不同的颜色 我可以设置吗alpha取决于组中的JointGrid 或者甚至在单个数据点上 sns set theme jg sns JointGrid data df sns x x y y hue hue
  • 将 python 代码写入 python 文件的最佳方法是什么?

    我想编写一个脚本 generate script py 生成另一个python脚本 file generated py 到目前为止我已经创建了generate script py import os filepath os getcwd d
  • pandas:如何将嵌套 JSON 解包为数据帧?

    我有这样的 JSON 输出 json json SeriousDlqin2yrs prediction 0 prediction probs 0 0 95 1 0 04 SeriousDlqin2yrs prediction 0 predi
  • 当日志在不同进程中发出时,caplog 中的消息为空

    我正在使用 log cli true 运行测试 剧本 import logging import sys from multiprocessing import Process logging basicConfig stream sys
  • 如何编写凯撒密码 Python

    我不知道如何开始编写程序 input input Input the text you would like encrypted def cipher text letter code for i in input number code
  • 从Python中的URL中提取域[重复]

    这个问题在这里已经有答案了 我有一个像这样的网址 http abc hostname com somethings anything 我想得到 hostname com 我可以使用什么模块来完成此任务 我想在python2中使用相同的模块和
  • 如何防止模块被导入两次?

    在编写python模块时 有没有办法防止它被客户端代码导入两次 就像 c c 头文件一样 ifndef XXX define XXX endif 非常感谢 Python 模块不会被多次导入 仅运行两次 import 不会重新加载模块 如果你
  • 如何使用 Python 从 Azure Functions 中的辅助线程重定向日志

    我正在使用 Azure 函数运行启动多个线程的 Python 脚本 出于性能原因 一切都按预期工作 但 Azure Functions 日志中仅显示来自 main 线程的信息日志 我在 main 中启动的 辅助 线程中使用的所有日志都不会出
  • Pandas DataFrame 中多列的映射方法

    我有一个 Pandas 数据框 其中的值是列表 import pandas as pd DF pd DataFrame X 1 5 1 2 Y 1 2 5 1 3 5 DF X Y 0 1 5 1 2 5 1 1 2 1 3 5 我想检查

随机推荐