Skip to main content

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

Project description

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``.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for Classless, version 0.0.2
Filename, size File type Python version Upload date Hashes
Filename, size Classless-0.0.2.tar.gz (3.2 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page