Advanced ZClass Creation Question
I'm building a product with a handful of ZClasses. I've built a couple of them and I find that I'm duplicating method code everytime I create a new ZClass definition. What I would like to do is abstract out some of the commonality into a base Python class that all my ZClasses would derive from. However, my brain starts to hurt when I think about the difference between sending messages to the ZClass object itself (say createInObjectManager), and sending messages to the instance which gets created by that creation method. What I want to be able to do is have a common object creation method as well as some common instance methods. Would these all be defined in one base class? For example, right now when I create an instance of my ZClass, I compute a unique ID and then pass that value into the createInObjectManager method. To do this, I'm thinking I would create a class like this: class MyCommonZClassBase: def createNewObject(self, REQUEST=None): newid = self.computeNewId() return self.createInObjectManager(newid, REQUEST) When I defined my ZClass, I would include "MyCommonZClassBase" as a base class of my ZClass (actually I would probably create a custom Python class for each ZClass that I wanted to create and this class would derive from MyCommonZClassBase). I assume that I could then create a new object by doing: MyZClass.createNewObject(REQUEST) Now that I've created my new object, I also have some things that I want to do whenever any of my ZClasses gets instantiated. For example, I want to set properties and update a Catalog (with an arbitrary name) To do this, I would might write a method like this: def initNewObject(self, REQUEST): REQUEST.set('title', REQUEST['name']) self.unindex_object() self.manage_editCataloger(self.catalogName, REQUEST) self.index_object() My question (and confusion) is this, would I define this method in MyCommonZClassBase, or would it have to be defined somewhere else? In Smalltalk, this would be handled by having a class method called "createNewObject" and an instance method called "initNewObject". Python doesn't seem to have that distinction, so I'm confused as to what I would need to do to make this work. Any tips or insights on this matter would be greatly appreciated. Thanks. James W. Howe mailto:jwh@allencreek.com Allen Creek Software, Inc. pgpkey: http://ic.net/~jwh/pgpkey.html Ann Arbor, MI 48103
participants (1)
-
James W. Howe