skip to navigation
skip to content

Not Logged In

Classless 0.0.2

Easily curry multiple functions to a given list of arguments without using classes

Classless
=============

Get all the benefits of making your functions methods on a class
without actually having define them methods on a class!

**Classless** allows you, instead,
to pass a list of functions to ```gen_class```
and curry them on the specified attributes.

Example:

.. code-block:: python

    from classless import gen_class

    def fun_stuff(db, name, x):
        q = db.get(name)
        return int(q) + x

    def cool_stuff(q, z, name, y, db):
        db.insert(name, (q, z, y))

    def awesome_adventure(w, name):
        if w > 5:
            return name
        else:
            raise Exception("I don't approve of the name {}".format(name))


    MyPretendClass = gen_class(methods=(fun_stuff,
                                        cool_stuff,
                                    awesome_adventure),
                           init_attrs=['db', 'name'])

and then we use ``MyPretendClass`` just like any regular class:

.. code-block:: python

    obj = MyPretendClass(name='NiceName', db=some_connection)
    obj.awesome_adventure(25) # Calls awesome_adventure with name='NiceName'
                              # and w=25

    obj.cool_stuff(1,2,3) # == cool_stuff(1, 2, 'NiceName', 3, some_connection)


    obj.fun_stuff('Dr. X') # == fun_stuff(x='Dr. X', name='NiceName',
                           #              db=some_connection)
where ``obj`` just holds the list of ``methods`` curried on the ``init_attrs``.

We could have defined ``MyRealClass`` as so and get identical behaviour:

.. code-block:: python

    class MyRealClass(object):
        def __init__(self, db, name):
            self.db = db
        self.name = name

        def fun_stuff(x):
            q = self.db.get(self.name)
            return int(q) + x

        def cool_stuff(q, z, y):
            self.db.insert(self.name, (q, z, y))

        def awesome_adventure(w):
            if w > 5:
                return self.name
            else:
                raise Exception("I don't approve of the name {}".format(self.name))

But, then every one of those methods is tied down to a given class, and can't be used as regular functions, without first constructing ``MyRealClass``.
 
File Type Py Version Uploaded on Size
Classless-0.0.2.tar.gz (md5) Source 2013-09-26 3KB
  • Downloads (All Versions):
  • 16 downloads in the last day
  • 50 downloads in the last week
  • 258 downloads in the last month