github littlecodersh/ItChat v1.3.5
修复循环引用

latest releases: v1.3.10, v1.3.9, v1.3.8...
7 years ago

如果两个类互相引用将导致无法被正常回收,所以采取这种形式:

from weakref import ref

class D(object):
    def __init__(self, name):
        self.name = name
    def __del__(self):
        print('[deleted]: %s' % self.name)

class T(D):
    @property
    def pointer(self):
        return getattr(self, '_pointer', lambda: None)()
    @pointer.setter
    def pointer(self, value):
        self._pointer = ref(value)

def fn():
    t, d = T('t'), D('d')
    t.pointer, d.pointer = d, t

if __name__ == '__main__':
    fn()
    print('end')

在itchat中主要解决这样两个问题:

你需要对照该版本和前版本的结果比较差别。

from weakref import ref

from itchat.storage import templates

def fn():
    chatroom = templates.Chatroom()
    chatroom.memberList.append({})
    m = chatroom.memberList[0]
    return ref(m), ref(chatroom)

if __name__ == '__main__':
    a, b = fn()
    print(a(), b())
from weakref import ref

from itchat import Core

def fn():
    r = Core()
    return ref(r)

r = fn()
print(r())

Don't miss a new ItChat release

NewReleases is sending notifications on new releases.