How do I chain methods?

James Mills prologic at shortcircuit.net.au
Mon Oct 25 01:08:28 CEST 2010


On Mon, Oct 25, 2010 at 8:47 AM, chad <cdalten at gmail.com> wrote:
> I tried the following...
>
>
>
> #!/usr/bin/python
>
> class foo:
>    def first(self):
>        print "Chad "
>
>    def last(self):
>        print "A "
>
> x = foo()
> y = x.first()
> y.last()
>
> But when I ran it, I got the following...
>
> [cdalten at localhost oakland]$ ./chain.py
> Chad
> Traceback (most recent call last):
>  File "./chain.py", line 12, in ?
>    y.last()
> AttributeError: 'NoneType' object has no attribute 'last'
> [cdalten at localhost oakland]$

What you want is this:

>>> class Foo(object):
...     def first(self):
...             print "Chad "
...             return self
...     def last(self):
...             print "A "
...             return self
...
>>> x = Foo()
>>> y = x.first()
Chad
>>> y.last()
A
<__main__.Foo object at 0x1011d7ad0>
>>>

NB: You must return "self" in this case so you can do chained calls.

cheers
James

-- 
-- James Mills
--
-- "Problems are solved by method"



More information about the Python-list mailing list