Python 中的匿名对象
本篇文章将介绍在 Python 中创建匿名对象的方法。
在 Python 中使用 namedtuple 类创建匿名对象
匿名对象只是一个没有真实名称的值。 因此,它被称为匿名。
有时创建一个匿名对象来保存值比定义一个全新的类更容易。
默认情况下,与 C# 和 Java 不同,Python 编程语言本身不支持匿名类。 但是,只要有一点创意,我们就可以找到一种变通方法并模仿匿名对象的功能。
对于初学者,我们可以利用 Python 集合模块中的 namedtuple 类来模拟匿名对象。 以下代码演示了如何使用 Python 的 namedtuple 类创建匿名对象。
from collections import namedtuple
anonymousClass = namedtuple("variables", ['foo', 'woo', 'boo'])
obj1 = anonymousClass(foo=1, woo=2, boo='3')
obj1.boo
输出:
'3'
我们首先使用 namedtuple("variables", ['foo', 'woo', 'boo']
初始化命名元组 anonymousClass。在构造函数中,我们传递了一个键/值对,其中值是变量名列表,其中 我们最终将存储我们的临时值。
在我们的用例中,无论我们作为构造函数的键传递什么,都不会对我们的结果产生太大影响。 我们现在可以使用这个 anonymousClass 对象通过 obj1 = anonymousClass(foo=1, woo=2, boo='3')
创建匿名对象。
这种方法的好处是匿名类对象是可重用的,我们可以创建任意多的匿名对象。 这种方法的主要缺点是我们在初始化命名元组时需要知道变量的数量。
在 Python 中使用 type() 函数创建匿名对象
声明匿名对象的另一种方法是使用 Python 中的 type()
函数。 type() 函数有 3 个参数; 新数据类型的名称、其中值的数据类型以及一组值。
以下代码片段演示了我们如何使用 Python 中的 type()
函数模拟匿名对象的行为。
obj = type('',(object,),{"foo": 1, "woo": 2, "boo": '3'})()
obj.boo
输出:
'3'
在上面的代码中,我们向 type()
函数的第一个参数传递了一个空字符串,它对应于新数据类型的名称。 第二个参数是指定为对象的数据类型。
第三个参数是一组以键/值对形式给出的值,其中键是变量的名称,值是其对应的值。 与我们以前的方法相比,这种方法有其优点和缺点。
这里明显的缺点是我们不能重用 obj 来初始化更多的匿名对象,这与前面示例中的 anonymousClass 不同。 这种方法的优点是我们可以指定更多的变量而无需先声明它们。
可以修改此 type()
函数以合并新值,而无需首先使用 dict 而不是对象数据类型指定它们的名称。 以下代码片段向我们展示了此方法的工作原理。
obj3 = type("", (dict,), {"foo": 1, "woob": 2})()
obj3.boo = 123
obj3.boo
输出:
123
在上面的代码中,我们用 dict 替换了前面示例中的对象。
上面讨论的两种方法都各有优缺点。 他们都不是明显的赢家,哪一个取决于我们的用例。
如果我们已经知道我们最终要存储的值的数量,但您需要多个匿名对象,那么 namedtuple 方法会更好。 如果我们不知道值的数量而只需要一两个匿名对象,则 type()
方法会更好。
相关文章
Python 中的短路评估
发布时间:2023/06/02 浏览次数:193 分类:Python
-
本文是关于使用逻辑运算符在 Python 中显示短路行为。Python 中的逻辑运算符 or (或)运算符。短路是指当表达式的真值已经确定时终止布尔运算。 Python 解释器以从左到右的方式计算表达式。
Python 比较两个 CSV 文件并打印差异
发布时间:2023/06/02 浏览次数:92 分类:Python
-
本文将讨论比较两个 CSV 文件的各种方法。 我们将包括执行此操作的最“Pythonic”方式和可帮助简化此任务的外部 Python 模块。最后,我们将包括一种使用 Pandas DataFrames 识别 CSV 文件差异的方法
Python 将 CSV 分割成多个文件
发布时间:2023/06/02 浏览次数:180 分类:Python
-
在本文中,我们将学习如何在 Python 中将一个 CSV 文件拆分为多个文件。 我们将使用 Pandas 创建一个 CSV 文件并将其拆分为其他多个文件。
将多个 CSV 文件导入 Pandas 并连接成一个 DataFrame
发布时间:2023/06/01 浏览次数:168 分类:Python
-
本篇文章介绍如何读取多个 .csv 文件并将所有 DataFrame 连接成一个。本篇文章将使用 Pandas 读取数据文件并创建和组合 DataFrame。
Python 中的 F-Test
发布时间:2023/06/01 浏览次数:113 分类:Python
-
本篇文章介绍 F 统计、F 分布以及如何使用 Python 对数据执行 F-Test 测试。方差(ANOVA) 分析中的 F 值
Python 套接字刷新
发布时间:2023/06/01 浏览次数:141 分类:Python
-
Python 套接字刷新 我们有没有想过如何在 Python 中刷新套接字?刷新套接字在网络应用程序中很常见,但大多数人需要帮助才能理解它是如何工作的。
Python 套接字 Accept 超时
发布时间:2023/06/01 浏览次数:138 分类:Python
-
本文讨论了 Python 中套接字的超时功能,该功能对于缓解无限期等待套接字接受的问题是必要的。套接字接受、拒绝和超时。Socket Accept:当socket打开成功,此时服务端和客户端已经建立连接,可
在 Python 中使用 OpenCV 的 imshow() 函数
发布时间:2023/06/01 浏览次数:80 分类:Python
-
本篇文章将介绍如何使用该库的 imshow() 函数。在 Python 中使用 OpenCV 库中的 imshow() 函数 cv2.imshow() 函数可以在新窗口中显示图像。 创建的窗口将自动调整以适合图像。
Python 中的 OpenCV-contrib 模块
发布时间:2023/06/01 浏览次数:192 分类:Python
-
Python 提供了一个名为 OpenCV 的标准库。 它有很多工具和功能来处理和实现不同的技术和算法。这个 OpenCV 库中有一个名为 OpenCV-contrib 的附加项。 我们将在本教程中讨论这个 OpenCV-contrib 模块及其