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.getself.name)
return int(q) + x

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

def awesome_adventure(w):
if w > 5:
return self.name
else:
raise Exception("I don't approve of the name {}".formatself.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):
  • 4 downloads in the last day
  • 59 downloads in the last week
  • 186 downloads in the last month