[Zope-dev] summary of discussion was: adapter vs factory Re: implementing zope.component 4.0

Martijn Faassen faassen at startifact.com
Tue Dec 1 11:19:06 EST 2009


Hey,

Chris McDonough wrote:
[snip]
> If you want to create a world where callers never need to care about the 
> lifetime of any object returned by a component lookup, you could also return a 
> proxy wrapper around the returned object that only allows for the invocation of 
> the methods defined in the interface looked up.  Any other access or invocation 
> would raise an exception.
> 
> This would make this worldview 100% consistent, completely documentable, and 
> would cause no confusion during use.  It would thus remove any logical argument 
> I have against it.  I wouldn't be eager to use such a system, but it's totally 
> consistent.

In the Python world interfaces aren't enforced on the language level. 
But we all know that the programmer better beware and follow the 
implicit API anyway.

With zope.interface, we have a tool to make that implicit interface 
explicit.

Static type advocates argue that if you actually shouldn't cheat anyway, 
you should have the language help you in verifying that what you're 
doing is correct.

Dynamic type advocates argue that the developer overhead of typical 
statically typed languages is so big that we'd rather have a bit more 
danger. And sometimes being able to cheat and get away with it is darn 
convenient.

We happen to be using a dynamically typed language. I don't understand 
why this particular situation is so unique that this would require a 
proxy that raises exceptions. If you follow that reasoning, you could 
just as well say the only sane way to use methods in Python is to 
require proxies that raise exceptions around method arguments if the 
input doesn't provide the right interface.

Regards,

Martijn



More information about the Zope-Dev mailing list