Re: [Zope-dev] Extension class and __init__

2002-07-28 Thread Dieter Maurer

Ross Boylan writes:
 > The example there is basically
 > class Spam:
 >   def __init__(self):
 > ...
 > 
 > class ECSpam(Base, Spam):  #Base is an ExtensionClass
 >   def __init__(self):
 > ECSpam.inheritedAttribute('__init__')(self)
I started to use the following idiom:

  class ECSpam(...,Spam): ...
_Spam__init= Spam.__init__

def __init__(self):
  self._Spam__init()

i.e., rename the overloaded method in you derived class and call
it in the normal way with its new name.


Dieter

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )



Re: [Zope-dev] Extension class and __init__

2002-07-27 Thread Chris Withers

Ross Boylan wrote:


> class ECSpam(Base, Spam):  #Base is an ExtensionClass
>   def __init__(self):
> ECSpam.inheritedAttribute('__init__')(self)
> 
> 
> What if you have more than one base class with the method defined?

The normal Python inheritted attribute lookup rules: depth first, left to right 
through the list of base classes.

> The implication of th example is that the non-extension class base
> class is used 

If Spam defines __init__ and Base doesn't, that would be the case...

> (though even that is not clear; would this work if Base
> had __init__?),

No, in that case Base's __init__ would be used, see python inheritence rules.

> but what if there are several non-extension base
> classes?

See python inheritence rules...

> The syntax doesn't provide a way of indicating which class you want
> the method from, and so it seems incomplete.

Well, if you wanted it to come from Base specifically, you could do:

Base.inheritedAttribute('__init__')(self)

not sure about the non-EC bases, perhaps Jim could clarify this?

cheers,

Chris

> 
> ___
> Zope-Dev maillist  -  [EMAIL PROTECTED]
> http://lists.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists - 
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope )
> 
> 



___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )



Re: [Zope-dev] Extension class and __init__

2002-07-27 Thread Lennart Regebro

From: "Adrian Hungate" <[EMAIL PROTECTED]>
> Erm... that trashes the concept of mixin's, doesn't it?

No, why would it? Just make your mixins inherit Extentionclass.base!
If you have third-party mixins that aren't made for Zope from the beginning
and need initailization, then you probably have to Zopify them first. I
don't see how this is convoluted. It's not obvious to non-Zope gurus, but
that is what comments are for. :-)



___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )



Re: [Zope-dev] Extension class and __init__

2002-07-22 Thread Chris McDonough

Ross,

Please see the bit about "inheritedAttribute" in the document inside
Zope's source tree named
lib/Components/ExtensionClass/doc/ExtensionClass.html.

HTH,

- C

- Original Message -
From: "Ross Boylan" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Cc: "Ross Boylan" <[EMAIL PROTECTED]>
Sent: Monday, July 22, 2002 3:30 AM
Subject: [Zope-dev] Extension class and __init__


> I had the bright idea of defining a mixin class whose methods I
> thought I could use in my regular Zope product classes:
>
> class AMixin:
>   def __init__(self):
>  blah, blah blah
>
> class B(AMixin, Persistent, Folder, ):
>   def __init__(self):
> # do some of my own stuff
> AMixin.__init__(self)
>
> This fails with the warning (as I recall) that the unbound method
> AMixin.__init__ needs to be called with an instance as its first
> argument.  (I've stripped the example down to give what I think are
> the essentials).
>
> self in the context of B is an Extension class, and I'm guessing
this
> is making AMixin unhappy because it's not.  I assume I'll have the
> same problem with other methods that I attempt to access using
> AMixin.foo(self).
>
> Can anyone confirm this diagnosis?  And what's the best solution?
>
> I have redefined things
> class AMixin:
>   def _mixin_init(self):
> #stuff
>
> class B(AMixin, .):
>def __init__(self):
> #my own stuff
> self._mixin_init(self)
>
> and this seems to work, but I wonder if there's a way to get the
> classes to play together better (maybe "class
AMixin(ExtensionClass):"?
> though since ExtensionClass is a type I guess that's not exactly
it).
>
> This was after already discovering that isinstance doesn't work with
> ExtensionClass (which I see confirmed on the list, along with the
fact
> that ExtensionClass generally has a lot of rough spots and may be on
> the way out).  This is with Zope 2.5.1.
>
>
> ___
> Zope-Dev maillist  -  [EMAIL PROTECTED]
> http://lists.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope )
>



___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )