LEEFEI571 发表于 2022-12-1 21:35:19

__del__魔法方法的对象重生

各位大神:
   我在看小甲鱼的视频<原来Python懂魔法-类和对象(VIII)>其中讲到__del__魔法方法的对象重生,其中视频中的例子如下:
   class D:
       def __init__(self, name):
         self.name = name
       def __del__(self):
         global x
         x = self
   当执行上述语句时,首先执行d = D('小甲鱼'),后续在访问全局变量x时正常,但在访问x.name时系统却报错,报错内容为AttributeError: 'D' object has no attribute 'name',但视频中x.name却显示'小甲鱼'.
   我检查了一遍代码,都没有问题,为何我执行x.name时却报错,未能像视频里那样反显出'小甲鱼'.

lxping 发表于 2022-12-1 22:49:23

本帖最后由 lxping 于 2022-12-1 23:13 编辑

运行了一遍没有问题,请把你操作的语句都贴出来看下。
class D:
    def __init__(self, name):
      self.name = name
    def __del__(self):
      global x
      x = self

d = D("小甲鱼")
d
<__main__.D object at 0x000001DEF0A65C60>
d.name
'小甲鱼'
del d
x
<__main__.D object at 0x000001DEF0A65C60>
x.name
'小甲鱼'
d
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
    d
NameError: name 'd' is not defined. Did you mean: 'D'?

LEEFEI571 发表于 2022-12-2 20:03:47

lxping 发表于 2022-12-1 22:49
运行了一遍没有问题,请把你操作的语句都贴出来看下。

class D:
    def __init__(self, name):
      self.name = name
    def __del__(self):
      global x
      x = self

我又试了一下,访问x的时候却显示错误,错误信息为"NameError: name 'x' is not defined".

lxping 发表于 2022-12-2 20:40:38

你运行的代码发出来看下

LEEFEI571 发表于 2022-12-2 21:34:45

lxping 发表于 2022-12-2 20:40
你运行的代码发出来看下

lxping 发表于 2022-12-2 21:57:48

本帖最后由 lxping 于 2022-12-2 22:02 编辑

你的 “global x” 中的 x 是不是用的大写了?改成小写的x就可以了
页: [1]
查看完整版本: __del__魔法方法的对象重生