首页 > 解决方案 > 类中的析构函数在使用类时不断调用它自己

问题描述

我正在运行这段代码:

import random
class Pound:
    def __init__(self):
        self.value=1.00
        self.color="gold"
        self.num_ages=1
        self.diameter=22.5
        self.thickness=3.15
        self.heads=True
        self.num_pocket=10

    def __del__(self):
        print("Coin spent!")

    def rust(self):
        self.color="greenish"

    def clean(self):
        self.color="clean"

    def flip(self):
        heads_options=[True,False]
        choice=random.choice(heads_options)
        self.heads=choice

coin1=Pound()
print(coin1.value)

当我在 Python IDLE 中运行它时,我没有任何问题。但是当我在 ATOM 中运行它(使用 atom-python-run 或脚本包)时,它总是向我显示这个输出:

1.0
Coin spent!

析构函数似乎在调用自己。我不知道如何解决这些问题,也没有在任何地方找到任何关于此的问题。

标签: pythonpython-3.xoop

解决方案


在此代码中,当被解释为脚本时,对象会立即超出范围,print因为此后程序结束。__del__在这种情况下被调用,因为那时,“实例即将被销毁”(docs)。

但是,当从 REPL 运行时(如 IDLE),在您终止 REPL 之前它不会超出范围,因此__del__不会立即调用。

这是预期的行为。


另请注意,文档不喜欢“析构函数”这个词:

这也称为终结器或(不正确的)析构函数。


推荐阅读