Wrapping paper, anyone ?

Peter Otten __peter__ at web.de
Wed Dec 16 10:18:35 EST 2009


simon wrote:

> On Dec 16, 9:00 pm, Peter Otten <__pete... at web.de> wrote:
>> simon wrote:
>>
>> Nice :)
>>
>> --- stars.py    2009-12-16 10:52:49.553505036 +0100
>> +++ stars_fixed.py      2009-12-16 10:53:32.545786454 +0100
>> @@ -48,7 +48,9 @@
>> def __init__(self):
>> self.calls = []
>>
>> -    __getattr__ = ScribeCall
>> +    def __getattr__(self, name):
>> +        return ScribeCall(self, name)
>> +
>> def run(self, ctx):
>> for call in self.calls:
>> #print "ctx.%s(%s)" % (call.name, ', '.join(str(x) for x in
>> call.args))
>>
>> Peter
> 
> Oh.. I'm on py2.5.. does this not work for you ?

You mean 2.4? Here's a little demo:

$ cat scribecall.py
class ScribeCall(object):
    def __init__(self, scribe, name):
        print "init", scribe, name
    def __call__(self, *args, **kw):
        print "call", args, kw

class Scribe(object):
    __getattr__ = ScribeCall

if __name__ == "__main__":
    scribe = Scribe()
    scribe.yadda(42)

$ python2.4 scribecall.py
init <__main__.Scribe object at 0x7fc87b9a1450> yadda
call (42,) {}

$ python2.5 scribecall.py
Traceback (most recent call last):
  File "scribecall.py", line 12, in <module>
    scribe.yadda(42)
TypeError: __init__() takes exactly 3 arguments (2 given)

$ python2.5 -V
Python 2.5.4

$ python2.6 scribecall.py
Traceback (most recent call last):
  File "scribecall.py", line 12, in <module>
    scribe.yadda(42)
TypeError: __init__() takes exactly 3 arguments (2 given)

Peter



More information about the Python-list mailing list