[PEAK] adapt based on inheritance
Phillip J. Eby
pje at telecommunity.com
Wed Jun 9 15:41:45 EDT 2004
At 03:12 PM 6/9/04 -0400, Stephen Haberman wrote:
>I'd like to do something like:
>for f in modelElement.mdl_features:
> f = adapt(f, IMyFeatureInterface)
>And then have model.Attribute features get adapted to MyAttributeFeature and
>model.Collection features get adapted to MyCollectionFeature.
>I was initially thinking asAdaptorForTypes would work, but the type of both
>model.Attribute and model.Collection features is
>Is there a convenient way to adapt based on the base classes of the target
>object? I was rather surprised I couldn't, though perhaps this is a misuse
>of the adaption concept?
What you want is 'declareAdapter(adapterfactory, provides=[IWhatever],
forObjects=[feature]). That is, you want to declare adapters for the
specific object(s), not their classes. Inheritance will then do what you
Keep in mind, however, that the use of Collection as a base class for
multi-valued features is quite optional. Inheriting from Attribute and
setting the upperBound to a number greater than 1 suffices to make the
feature multi-valued, and this approach is used in e.g. code generated by
the 'mof2py' script.
More information about the PEAK