It would seem that the current default mechanism is poorly
suited to providing default values for non-immutables.
For example: class IBar( Interface ): a =
Object( schema = IFoo,
default = Foo() ) But if a “Foo” is not
immutable this doesn’t make sense. (In my case, I want “a” to
be a collection providing IFoo, which defaults to an
empty collection. Each Bar implementing IBar should have its own instance of Foo.) A proposal to remedy: if the default is a callable object,
it is assumed to be a factory. How does this sound? (This would apply to missing_value as well.) A few further questions: 1) who should be responsible for
setting defaults, and how should it be done? I have a base class from which I derive (e.g.) Bar, whose constructor
loops through fields of interfaces provided by the instance: for iface in zope.interface.providedBy(
self ):
for fname, field in zope.schema.getFields( iface ).iteritems(): It checks default & missing_value,
and sets them. However, if one field shadows another in the interfaces, there
is no guarantee that I hit them in the right order. Might it not be good to
have a “attributesProvidedBy( instance ) in zope.interface
that guarantees that it passes back the most derived versions (and resolves
consistently when there is no “most derived” )? Also, currently, when something doesn’t have a
definition, and is not required, I check first for “default” then
for “missing_value”, and use the first I
find as a missing value. Is this correct? How should “default” and “missing_value” interact with each other? What makes
most sense to me is: (pseudocode): If not specified: If default
defined Use default Else If required
Raise error Else
If missing value defined
Use missing value
Else
Raise error Finally, a missing missing_value
eventually gets “None” in the current Field constructor. Shouldn’t
it be left undefined when it wasn’t specified? (Same
for default.) -
Shaun |
_______________________________________________ Zope3-dev mailing list Zope3-dev@zope.org Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com