[Zope] Zope and Polymorphism

Jay, Dylan djay@lucent.com
Fri, 11 Feb 2000 15:56:39 +1100


yes but what if you don't own the base class?

> -----Original Message-----
> From: Steve Spicklemire [mailto:steve@spvi.com]
> Sent: Friday, February 11, 2000 3:35 PM
> To: jfarr@real.com
> Cc: djay@lucent.com; zope@zope.org
> Subject: Re: [Zope] Zope and Polymorphism
> 
> 
> 
> Hi Johnothan,
> 
>    I think the problem with these (issubclass, isinstance) is that
> they deal with class objects, and they may not be that easy to handle
> in dtml. On the other hand, meta_types are just strings...  so they
> can be easily created/changed. I still like the idea of simply
> defining some property in the base class that I can quickly check for
> in any instance
> 
> i.e.,
> 
> <dtml-in objectValues>
> <dtml-if "_.hasattr(_['sequence-item'],'iCanDoTheChaCha')">
> 
> blah blah blah....
> 
> </dtml-if>
> </dtml-in>
> 
> 
> but if you're dead set against that I don't understand why 
> you couldn't use something like:
> 
> <dtml-in objectValues>
> <dtml-if "checkObjectMetaType(_['sequence-item'], metaTypeToCheck)">
> 
> blah blah blah....
> 
> </dtml-if>
> </dtml-in>
> 
> 
> where 'metaTypeToCheck' could be "Dokument" as mentioned in another
> post, and 'checkObjectMetaType' is defined as below.
> 
> -steve
> 
> ----------------------------------------------------------------------
> 
> #
> #
> # Check a classes base types for a certain meta_type... a little
> # safer this time.....
> #
> #
> 
> def checkClassMetaType(theClass, meta_type):
>     """ check a class... and all super classess for meta_type...."""
> 
>     result = 0
> 
>     if hasattr(theClass, 'meta_type') and theClass.meta_type 
> == meta_type:
>         result = 1
>     else:
>         for subClass in theClass.__bases__:
>             result = checkClassMetaType( subClass, meta_type)
>             if result:
>                 break
> 
>     return result
> 
> 
> def checkObjectMetaType(self, object, meta_type):
>     """ check and object for an ancestral meta_type..."""
> 
>     try:
>         if hasattr(object, 'meta_type') and object.meta_type 
> == meta_type:
>             return 1
>         else:
>             return checkClassMetaType(object.__class__, meta_type)
>     except AttributeError:
>         return 0
> 
> 
> ----------------------------------------------------------------------
> >>>>> "Jonothan" == Jonothan Farr <jfarr@real.com> writes:
> 
>     >> Isn't there some method like
>     >> _.inheritsfrom(_['sequence-item'],'Folder')
> 
> 
>     Jonothan> There's issubclass() in Python. Is this what you're
>     Jonothan> looking for?
> 
>     Jonothan> issubclass (class1, class2) Return true if class1 is a
>     Jonothan> subclass (direct or indirect) of class2. A class is
>     Jonothan> considered a subclass of itself. If either argument is
>     Jonothan> not a class object, a TypeError exception is raised.
> 
>     Jonothan> -jfarr
>