| create a weakref: | |
| >>> import dill | |
| >>> import weakref | |
| >>> class Object: | |
| ... pass | |
| ... | |
| >>> o = Object() | |
| >>> r = weakref.ref(o) #XXX: type: weakref.ReferenceType | |
| >>> r | |
| <weakref at 0xb12f60; to 'instance' at 0xb23080> | |
| >>> o | |
| <__main__.Object instance at 0xb23080> | |
| >>> r() | |
| <__main__.Object instance at 0xb23080> | |
| >>> r.__call__() | |
| <__main__.Object instance at 0xb23080> | |
| >>> r.__hash__() | |
| 11677824 | |
| >>> id(o) | |
| 11677824 | |
| >>> o2 = Object() | |
| >>> r2 = weakref.ref(o2) | |
| >>> del o2 | |
| >>> r2 | |
| <weakref at 0xb306f0; dead> | |
| >>> r2() | |
| >>> r2.__call__() | |
| >>> r2.__hash__() | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| TypeError: weak object has gone away | |
| >>> o3 = Object() | |
| >>> r3 = weakref.proxy(o3) #XXX: type: weakref.ProxyType | |
| >>> r3 | |
| <weakproxy at 0x85b10 to instance at 0x8d530> | |
| >>> o3 | |
| <__main__.Object instance at 0x8d530> | |
| >>> r3.__class__ | |
| <class __main__.Object at 0x6aa50> | |
| >>> o3.__class__ | |
| <class __main__.Object at 0x6aa50> | |
| >>> del o3 | |
| >>> r3 | |
| <weakproxy at 0x85b10 to NoneType at 0x4f1aa0> | |
| >>> r3.__class__ | |
| Traceback (most recent call last): | |
| File "<stdin>", line 1, in <module> | |
| ReferenceError: weakly-referenced object no longer exists | |
| >>> class Object2: | |
| ... def __call__(self): | |
| ... pass | |
| ... | |
| >>> oo = Object2() | |
| >>> oo | |
| <__main__.Object instance at 0x8ca30> | |
| >>> oo() | |
| >>> rr = weakref.proxy(oo) #XXX: type: weakref.CallableProxyType | |
| >>> rr | |
| <weakproxy at 0x82930 to instance at 0x8ca30> | |
| >>> rr() | |
| >>> rr.__call__ | |
| <bound method Object.__call__ of <__main__.Object instance at 0x8ca30>> | |
| >>> rr.__call__() | |
| >>> | |
| ######################################## | |
| pickling generators: | |
| *) need to avoid the "new" method for FrameTypes... | |
| don't see how to do that, without going into C to get the GID Thread. | |
| *) currently inspecting: Objects/object.c Objects/dictobject.c Objects/genobject.c Objects/frameobject.c Python/pystate.c Python/thread.c Python/pythonrun.c | |
| *) the package "generator_tools" may have the answer. | |
| ######################################## |