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.
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