python - 类中的析构函数在使用类时不断调用它自己
问题描述
我正在运行这段代码:
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!
析构函数似乎在调用自己。我不知道如何解决这些问题,也没有在任何地方找到任何关于此的问题。
解决方案
在此代码中,当被解释为脚本时,对象会立即超出范围,print
因为此后程序结束。__del__
在这种情况下被调用,因为那时,“实例即将被销毁”(docs)。
但是,当从 REPL 运行时(如 IDLE),在您终止 REPL 之前它不会超出范围,因此__del__
不会立即调用。
这是预期的行为。
另请注意,文档不喜欢“析构函数”这个词:
这也称为终结器或(不正确的)析构函数。
推荐阅读
- microsoft-graph-api - 如何从 Teams 选项卡获取 OneNote 笔记本/分区/页面 ID
- python - 我可以结合这两个列表推导吗?
- linux - Pycharm 不会激活现有的虚拟环境
- javascript - 如何在 ChartJS 中单击时获取活动标签元素?
- java - Java Spring JpaRepository 自定义查询适用于 Windows,但不适用于 raspberry pi(debian?)
- html - 在标记选项的同一行的 td 中加载数据
- javascript - 在 Contentful 富文本渲染器中使用自定义 Angular 组件
- android - Android 或 iOS 物理或模拟器/模拟器设备未收到推送通知
- json - AWS API Gateway 作为 SQS 的代理 - 数据到达时没有正号
- r - 如何找到R中向量中存在的值的索引?