Adding properties in __init__
Hi, I have a product class that subclasses SimpleItem and PropertyManager. If I try and add a property in __init__ as so: self.manage_addProperty('AProperty','1\n2\n3','lines') I get the following wonderful error: Error Type: AttributeError Error Value: aq_base I'm guessing that this is because self isn't an acquisition wrapper in __init__ (even though SimpleItem is Acquisition.Implicit) but what am I supposed to do to add a property in __init__? cheers, Chris
Chris Withers wrote:
If I try and add a property in __init__ as so:
self.manage_addProperty('AProperty','1\n2\n3','lines')
I get the following wonderful error:
Error Type: AttributeError Error Value: aq_base
I made this go away with a patch to PropertyManager.py: =================================================================== RCS file: /cvs-repository/Zope2/lib/python/OFS/PropertyManager.py,v retrieving revision 1.30 diff -r1.30 PropertyManager.py 199c199 < or hasattr(self.aq_base, id): ---
or hasattr(getattr(self,'aq_base',self), id):
I'm sticking this in the collector so please tell me if my patch is wrong ;-) cheers, Chris
Chris Withers wrote:
self.manage_addProperty('AProperty','1\n2\n3','lines')
I'm guessing that this is because self isn't an acquisition wrapper in __init__ (even though SimpleItem is Acquisition.Implicit) but what am I supposed to do to add a property in __init__?
I usually override _properties in the subclass, with the new property definition, and then doing self.Aproperty = '1\n2\n3' works nicely. -- Itamar S.T. itamar@maxnm.com Fingerprint = D365 7BE8 B81E 2B18 6534 025E D0E7 92DB E441 411C
On Tue, 07 Nov 2000 11:54:57 +0000, Chris Withers <chrisw@nipltd.com> wrote:
I have a product class that subclasses SimpleItem and PropertyManager.
If I try and add a property in __init__ as so:
self.manage_addProperty('AProperty','1\n2\n3','lines')
I get the following wonderful error:
Error Type: AttributeError Error Value: aq_base
I'm guessing that this is because self isn't an acquisition wrapper in __init__ (even though SimpleItem is Acquisition.Implicit) but what am I supposed to do to add a property in __init__?
__init__ has no idea of context, so its less useful in Zope than you might usually expect. Your object must have a factory method somewhere.... I suggest adding an extra method to your object (I always name it '_after_create') and arrange for it to be called by your factory once the new object is installed in its container. Toby Dickenson tdickenson@geminidataloggers.com
Toby Dickenson wrote:
Your object must have a factory method somewhere.... I suggest adding an extra method to your object (I always name it '_after_create') and arrange for it to be called by your factory once the new object is installed in its container.
...yurch! ;-) Chris
participants (3)
-
Chris Withers -
Itamar Shtull-Trauring -
Toby Dickenson