gpt4 book ai didi

python - 关于Python动态实例化

转载 作者:行者123 更新时间:2023-11-30 22:56:17 26 4
gpt4 key购买 nike

我想弄清楚这里发生了什么。我想保留字符串键和类值的映射(也称为字典),以便在运行时创建新实例。我省略了 Farm 类定义,这在这里并不重要。

好吧,给出以下代码:

d = dict(farm = Farm)

# Dynamic instantiation with assignment
f1 = d["farm"]()
f2 = d["farm"]()

print(f1)
print(f2)

# Dynamic instantiation without assignment
print(d["farm"]())
print(d["farm"]())

我得到下一个输出:

C:\Python3\python.exe E:/Programacion/Python/PythonGame/Prueba.py
<BuildingManager.Farm object at 0x00F7B330>
<BuildingManager.Farm object at 0x00F7B730>
<BuildingManager.Farm object at 0x00F7BAD0>
<BuildingManager.Farm object at 0x00F7BAD0>

Process finished with exit code 0

请注意,当我在没有分配的情况下打印它们时,引用是相同的(0x00F7BAD0)。

为什么 Python 中的实例化总是返回相同的对象?

最佳答案

Why does instantiation in Python always return the same object?

事实并非如此。再次查看输出返回的 ID:

只有最后一个被回收。而且它仍然不是同一个对象。

那么为什么最后两个 ID 相同,但前两个 ID 不同?

在前两种情况下,您分配给一个变量。该变量在程序的完整执行期间保留。因此,这两个对象中的每一个都是唯一的,并且仍然是唯一的。

然后是第三个实例化(第一个打印语句)。该对象已创建、打印,但从未分配给任何变量。因此,在打印之后,Python 可以忘记它。确实如此。在最后一个实例化(第二个打印语句)中,Python 创建一个 Farm 实例,但为其分配与未保留的实例相同的 ID(数字 3)。这只是方便,而且在幕后,这可能也是高效的(内存空间可用。)因此,您会看到一个回收的 ID,即使它实际上是一个新实例。

关于python - 关于Python动态实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com