Edward Muller wrote:
I've done Zope2 stuff in the past, including writing Zope2 Products.

We are working on new hosting software and have decided to use Zope 3.

So we're defining our interfaces and have started to define classes based on those interfaces and I have a question...

The simple todo app (http://worldcookery.com/files/jeffshell-todo/step1.html) shows the Todo class having three attributes (description, details, done). These are all defined in the interface using various zope.schema definitions.

But ...

The Boring product (http://products.nidelven-it.no/zope3_boring/) does the same thing in the interface with a title attribute. But when it gets to the class definition it uses:

def __init__(self, title='Default boring title'):
  self.title = title

The later is more familiar to me coming from Zope 2. Which is right? If they are both right, which is *more* right wrt Zope 3 ... and why?

With respect to interfaces, it's always a good idea to have your objects, incl. newly created ones, comply to the interfaces they promise to implement. In particular, this means that they should have default values for the schema attributes. Frameworks like zope.formlib also happen to rely on that.

My book also happens to show class-level attributes a lot. Lately I've come to prefer initializing attributes in the constructor (__init__) instead, though. It's really a matter of taste, in the end. If you like initializing them in the constructor, go with that...

http://worldcookery.com -- Professional Zope documentation and training
Next Zope 3 training at Camp5: http://trizpug.org/boot-camp/camp5

Zope3-users mailing list

Reply via email to