[Tutor] intefaces in python
rabidpoobear at gmail.com
Mon Jun 29 14:28:26 CEST 2009
Amit Sethi wrote:
> I think ideally i want a compile Error just like java ..
Why? For developers, so they'll know if their plugin meets the
Have you considered just making a unit test that will call all interface
functions with appropriate parameters? Then they can just run the test
on their code and if it passes they will know they implemented the
minimum required functions (whether they do what they're supposed to do
is a different story...) It would provide the same level of interface
security as Java would, except it would allow them to decide how much of
the contract they need to enforce for their specific application. That's
one of the things I like about python... for example, if I want to
override stdout so all my print statements go to a file, I just have to
create a new class that has a write() method that writes anything it's
passed to a file... I don't have to implement all of the other
functionality that whatever object resides there before has. So in that
case, if I ran your unit test on my replacement stdout, it may say "Hey,
you failed the writeline() test, your object doesn't have this!" but
since I know I'm not going to use writeline, I can just ignore the
warning. Or if I meant for it to have writeline, I can say "oh snap I
need to go implement writeline!" But as I said, that wouldn't enforce
the interface, just inform them of it if they desired that, which I
would personally prefer but you may not.
That's really the idea behind duck typing. Assume that they wrote
sufficient code to handle whatever you use it for and if they didn't
it'll blow up in their face.
> @Dave Angel
> You have said
> "you could arrange that when the plugin is first encountered, you
> validate that it has all the required methods and data members. Not
> by calling them, but by scanning the object for their existence."
> that would be ideal ... can you enlighten me on this how may one do that.
Not sure if it's what he meant, but you can just do a dir(object) and it
will return a list with all method / member names. then you could just
confirm that the names are there.
More information about the Tutor