Actually, there are two equally valuable clues from the debugger session: object : <class 'Products.Formulator.StandardFields.LabelField'> type : ExtensionClass.ExtensionClass refcount: 7 address : 0x8503bec If I understand correctly: LabelField is a class that inherits from Persistence and some other object has a reference to it that isn't via __class__.
persistent.Persistent._p_jar <attribute '_p_jar' of 'persistent.Persistent' objects>
If you ask a class for an attribute, it seems you can get a descriptor back. I vaguely recall Guido saying that this was the intended behavior last time I asked about it. 'jar' gives: object : <attribute '_p_jar' of 'persistent.Persistent' objects> type : getset_descriptor refcount: 2 address : 0x40621e6c Thus, asking for the class's _p_jar gives the descriptor back. In ZODB4 I hacked around this by requiring that the value of _p_jar be None or a string. Would there be any objection to having the same requirement in ZODB3? Jeremy