Chris Withers wrote:
Christian Theune wrote:
The problem you have is to provide a specification for the 'str'
There are a couple of problems here...
1. str is both a "function" and a "class"
Nope. It's a class since Python 2.2.
2. I was to register the "function" str as an adapter for, say, the
"class" int to the "class" str, so there's not factory for the adapter,
since it's a function
Let's create a marker interface that promises everything that 'str' does:
"""A marker for the 'str' interface."""
As discussed elsewhere, you shouldn't need the marker interface, as you
can adapt classes.
Right, as an *input* of the adaption it's ok just to specify a class.
But the output obviously always has to be specified by an interface.
Otherwise the whole point of using of adaption is perverted...
However, given the edge-case nature of this, I can
believe there might be "bugs" to be found here...
Now, you can setup your adapter like this:
Well, that's not right ;-)
Wtf? Then why do you need an adapter? I thought you wanted to say
IString(1) instead of str(1) to be more flexible...?
...and factory="str" is wrong for the reasons given above, or, put
differently, because str()(1) will tell you that strings aren't callable
Huh? You got that wrong. IString(1) will call str(1) if
provideAdapter(str, (int,), IString).
http://worldcookery.com -- Professional Zope documentation and training
Zope3-dev mailing list