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.

Source Distribution

Classless-0.0.2.tar.gz (3.2 kB view details)

Uploaded Source

File details

Details for the file Classless-0.0.2.tar.gz.

File metadata

  • Download URL: Classless-0.0.2.tar.gz
  • Upload date:
  • Size: 3.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for Classless-0.0.2.tar.gz
Algorithm Hash digest
SHA256 0228a3b73e406300f9e22d81deaa49a5530c6a5e68a813add093733e2d2dbea4
MD5 d604f2708358028b3c2668541e27543f
BLAKE2b-256 8c0abf3d1e910f58f7517714cdaa4378c235f3684b4fa99da602d1892f8eb726

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page