[python]weakref 的小例子

  • 4177
  • 0

[python]weakref 的小例子

最近才碰到什麼叫做 weakref。直接舉個例子:

import weakref, time
class A:
    def __del__(self):
        print 'class A been __del__'

class B:
    def make_a(self):
        refa = A()
        self.a_ref = weakref.ref(refa)
        return refa
b = B()
print '+make_a'
b.make_a()
print '-make_a'
print '+x = b.make_a()'
x = b.make_a()
print '-x = b.make_a()'
print '+time.sleep(10)'
time.sleep(10)
print '-time.sleep(10)'

執行的結果如下:

+make_a
class A been __del__
-make_a
+x = b.make_a()
-x = b.make_a()
+time.sleep(10)
-time.sleep(10)
class A been __del__

首先,__del__ 是物件被刪掉的時候會被呼叫的函式。
接下來,雖然在 class B 裡面,有用 self.a_ref 去接了類別 A 的實例 refa,
但是,若沒有在呼叫 b.make_a() 的時候用個變數去接 refa,馬上 refa 就被刪掉了。

若是有用個變數 x 去接 refa,

x = b.make_a()

那就可以撐到執行完了!

 

 

 

分享