Why cannot I use __slots__ and weakrefs together?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat May 26 05:17:22 EDT 2018


Here is my code:



---- cut here %< ----

import weakref
d = weakref.WeakValueDictionary()

class Spam:
    pass

class Eggs:
    __slots__ = ['spanish_inquisition']

d['a'] = Spam()  # Okay.
d['b'] = Eggs()  # Nobody will expect what happens next!

---- cut here %< ----


and the result I get is:


Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/weakref.py", line 158, in __setitem__
    self.data[key] = KeyedRef(value, self._remove, key)
  File "/usr/local/lib/python3.5/weakref.py", line 306, in __new__
    self = ref.__new__(type, ob, callback)
TypeError: cannot create weak reference to 'Eggs' object



Why does weakref hate my Eggs class?


-- 
Steve




More information about the Python-list mailing list