[Zope3-Users] Re: Newbie Question

Philipp von Weitershausen philipp at weitershausen.de
Fri Feb 23 18:14:38 EST 2007


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



More information about the Zope3-users mailing list