[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