[ZODB-Dev] property broken with/by ZODB?
Tim Peters
tim at zope.com
Tue Aug 17 15:10:24 EDT 2004
[Chris Cioffi]
> I'm converting a bunch of dicts into proper classes and am having some
> problems using the property builtin. When I derive the class from
> Persistent my properties don't work. Here's an example:
>
> import os.path
>
> import ZODB
> from Persistence import Persistent
...
You didn't say which version of ZODB you're using, but I'm guessing it's
some flavor of 3.2. Persistent is a Zope ExtensionClass, and
ExtensionClasses don't play well with many newer Python class features (such
as properties).
So I wouldn't expect this to work in 3.2.i (or 3.1.i, or ...).
You have a much better chance with ZODB 3.3. Persistent is a vanilla
new-style Python class in 3.3, so plays much better with new-style class
features (like properties). To run your code under 3.3b2 (the most recent
3.3 pre-release), you need to change
from Persistence import Persistent
to
from persistent import Persistent
Then you get the new-style Persistent base class. There's still an
ExtensionClass-based version in Zope, but it will no longer ship with ZODB;
if you try "from Persistence import Persistent" in ZODB 3.3, you get a long
message, starting with
UserWarning: Couldn't import the ExtensionClass-based base class
There are two possibilities:
1. You don't care about ExtensionClass. You are importing
Persistence because that's what you imported in the past.
In this case, you should really use the persistent package
instead:
>>> from persistent import Persistent
>>> from persistent.list import PersistentList
>>> from persistent.mapping import PersistentMapping
...
Anyway, I made that change, and then your program displayed:
The Persistent aware obj
somefile.txt
The "normal" object
somefile.txt
under 3.3b2, which is what I figure you wanted.
More information about the ZODB-Dev
mailing list