【发布时间】:2021-04-11 12:03:14
【问题描述】:
我有一个 Python 程序如下:
class a:
def __init__(self,n):
self.n=n
def __del__(self,n):
print('dest',self.n,n)
def b():
d=a('d')
c=a('c')
d.__del__(8)
b()
在这里,我在__del__() 中给出了一个参数n,只是为了清除我的疑问。它的输出:
$ python des.py
dest d 8
Exception ignored in: <function a.__del__ at 0xb799b074>
TypeError: __del__() missing 1 required positional argument: 'n'
Exception ignored in: <function a.__del__ at 0xb799b074>
TypeError: __del__() missing 1 required positional argument: 'n'
在像 C++ 这样的经典编程语言中,我们不能为析构函数提供参数。要知道它是否也适用于 python,我已经执行了这个程序。为什么解释器允许将参数n 作为析构函数的参数给出?那我该如何为n 指定值呢?尝试为__del__() 提供一个论据,结果很好。但是没有它我怎么能指定n的值呢?
【问题讨论】:
-
为什么会防止呢? Python 是动态类型的,你可以根据自己的喜好定义这些方法,但如果你弄错了,可能(如本例)在运行时看到错误。
-
基本上,
__del__不能有额外的参数,尽管语言并没有严格执行这条规则;带有额外参数的__del__方法仍然可以直接调用,只是当您使用del关键字时,它不能起到正确的__del__方法的作用。
标签: python destructor