On Sat, Sep 19, 2009 at 3:16 AM, Steven D'Aprano <steve@pearwood.info> wrote:
On Sat, 19 Sep 2009 06:19:25 pm Dj Gilcrease wrote:
I do not expect this idea to gain much traction but it has been an idea rolling around in my head for a year or two, so I decided to write it all down and see what other thought.
For starters, it's not clear what a static duck is.
Is it a type? Is it a syntax? Is it an extension to existing built-in types? All of the above?
When enabled, does the compiler do the type checking at compile time? Does it happen at runtime? Both? What sort of type checking is done? Pascal-style declarative type checking, or Haskell-style type inference?
Why "static duck"? What does this have to do with duck typing?
Rather than give an implementation of how users can create their own static ducks, it would be better to give some use-cases for where you would use them and what the behaviour is.
The reason I called it static ducks is because you can do "static duck typing". I didnt list file type objects because that means something different to different people. So lets say you want a file like object, any you only care about read, write, and close. class FileTypeCheck(StaticDuckBase): def _get_value(self): return self._value def _set_value(self, value): if not hasattr(value, 'read') or not hasattr(value, 'write') or not hasattr(value, 'close'): raise TypeError("value must be have read, write and close methods") self._value = value staticducks.add('file', FileTypeCheck)