[Tutor] Integer?
Luke Paireepinart
rabidpoobear at gmail.com
Wed Dec 6 10:07:02 CET 2006
> Very interesting. But what is "duckly-typed"? I'm so dumb I can't
> distinguish between a typo and a technical term..
>
> Dick Moores
>
>
Refer to the Wikipedia article on Duck Typing:
http://en.wikipedia.org/wiki/Duck_typing
Basically, if you saw my example earlier of substituting stdout:
#test.py
class FileLikeObject(object):
def __init__(self,current_stdout):
self.data = []
self.oldstdout = current_stdout
sys.stdout = self
def write(self,arg):
if arg != '\n':
self.data.append(arg)
def output(self):
sys.stdout = self.oldstdout
print self.data
sys.stdout = self
import sys
f = FileLikeObject(sys.stdout)
print "hello."
f.output()
print "hi"
f.output()
#-----
sys.stdout expects a file-like object, that has methods such as 'write'.
So I implemented a class with a 'write' method, and sys.stdout happily
used it as an output stream.
It's not the same type of object as the original sys.stdout was.
From IDLE,
>>> print sys.stdout
<idlelib.rpc.RPCProxy instance at 0x00B403F0>
So you see idle itself has replaced the default console stream of
>>> print sys.stdout
<open file '<stdout>', mode 'w' at 0x0097E068>
with its own version, which I replaced with my own version (the class
instance with the write method).
All that matters is that the object has a 'write' method for it to be
used as stdout (AFAIK).
HTH,
-Luke
More information about the Tutor
mailing list