Skip to main content

MetaClass supporting fine grained control of object creationand initialization

Project description

metaparams

PyPi Version PyPi Monthly Donwloads License Travis-ci Build Status Documentation Status Pytghon versions

metaparams is a MetaClass/Class/Decorator infrastructure to define params without invoking objects and have them automatically parse/remove the kwargs passed to the class in which they are intalled

Documentation

Read the full documentation at readthedocs.org:

Python 2/3 Support

  • Python 2.7

  • Python 3.2/3.3/3.4/3.5

  • It also works with pypy and pypy3

Installation

From pypi:

pip install metaparams

From source:

  • Place the metaparams directory found in the sources inside your project

Features:

  • metaparams decorator to params-enable any class

  • ParamsBase a class from which to subclass to also be params-enabled

  • MetaParams a MetaClass for more complex usage pattern

Quick Usage

With the decorator:

from metaparams import metaparams


@metaparams()
class A(object):

    params = (
        ('p1', True, 'doc'),
        ('p2', 99),
    )

    def __init__(self):
        pass

a = A()

# Defined params are reachable below the attribute params
print(a.params.p1)
print(a.params.p2)

# Modification of default values can be checked
assert a.params._isdefault('p1')

# Inheriting with modification an extension
class B(A):

    params = (
        ('p1', False,),  # changed default value of p1
        ('p3', None),  # new parameter
    )

    def __init__(self):
        pass

b = B()

# Defined params are reachable below the attribute params
print(b.params.p1)
print(b.params.p2)
print(b.params.p3)

# Modification of default values can be checked
assert b.params._isdefault('p1')

# Over the class we can also check defaults
# B has different default value for p1 than A
assert b.params.p1 != A.params._default('p1')

# The name of the attribute 'params' can be changed
# and a shorter alias (PEP-8 ...) added
@metaparams(_pname='kargs', _pshort=True)
class A(object):

    kargs = (
        ('p1', True, 'doc'),
        ('p2', 99),
    )

    def __init__(self):
        pass

a = A()

# Defined params are reachable below the attribute params
print(a.kargs.p1)
print(a.kargs.p2)

print(a.k.p1)
print(a.k.p2)

# Modification of default values can be checked
assert a.kargs._isdefault('p1')


# The metaclass works also so ... but it's a metaclass

class A(MetaParams.as_metaclass(_pname='kargs', _pshort=True)):

    kargs = (
        ('p1', True, 'doc'),
        ('p2', 99),
    )

    def __init__(self):
        pass

a = A()

# Defined params are reachable below the attribute params
print(a.kargs.p1)
print(a.kargs.p2)

print(a.k.p1)
print(a.k.p2)

# Modification of default values can be checked
assert a.kargs._isdefault('p1')


# And finally an already cooked base class with no customization
class A(ParamsBase):

    params = (
        ('p1', True, 'doc'),
        ('p2', 99),
    )

    def __init__(self):
        pass

a = A()

# Defined params are reachable below the attribute params
print(a.params.p1)
print(a.params.p2)

# Modification of default values can be checked
assert a.params._isdefault('p1')

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

metaparams-1.0.0.zip (14.1 kB view hashes)

Uploaded Source

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