Skip to main content

Manage properties outside a class.

Project description

Version_status Documentation license

What is free_properties?

free_properties is a python package that features the FreeProperty class. A FreePropety object behaves just like its value property, allowing it to be used as a proxy for get, and set calculations like a python property.


Get the latest version of free_properties from

If you have an installation of Python with pip, simple install it with:

$ pip install free_properties

To get the git version, run:

$ git clone git://


free_properties’s documentation is available on the web:

Getting started

The PropertyFactory is an FreeProperty class creator that functions similar to Python ‘property’ objects. Use the PropertyFactory to create a Weight class which calculates weight based on density and volume:

>>> def getter(self):
...    '''Weight (kg) based on volume (m^3).'''
...    data =
...    rho = data['rho'] # Density (kg/m^3)
...    vol = data['vol'] # Volume (m^3)
...    return rho * vol
>>> def setter(self, weight):
...    data =
...    rho = data['rho'] # Density (kg/m^3)
...    data['vol'] = weight / rho
>>> # Initialize with a value getter, setter, and the class name.
>>> Weight = PropertyFactory(getter, setter, 'Weight')

It is more convinient to use the PropertyFactory as a decorator:

>>> @PropertyFactory
>>> def Weight(self):
...    '''Weight (kg) based on volume (m^3).'''
...    data =
...    rho = data['rho'] # Density (kg/m^3)
...    vol = data['vol'] # Volume (m^3)
...    return rho * vol
>>> @Weight.setter
>>> def Weight(self, weight):
...    data =
...    rho = data['rho'] # Density (kg/m^3)
...    data['vol'] = weight / rho

Create dictionaries of data and initialize new Weight objects:

>>> water_data = {'rho': 1000, 'vol': 3}
>>> ethanol_data = {'rho': 789, 'vol': 3}
>>> weight_water = Weight('Water', water_data)
>>> weight_ethanol = Weight('Ethanol', ethanol_data)
>>> weight_water
Weight(Water) -> 3000 (kg)
Weight(Ethanol) -> 2367 (kg)

These properties behave just like their dynamic value:

>>> weight_water + 30
>>> weight_water + weight_ethanol
>>> weight_water.bit_length() # A method of the dynamic value

Get and set the value through the ‘value’ attribute:

>>> weight_water.value
>>> weight_water.value = 4000
>>> weight_water.value
>>> water_data # Note that the volume changed too
{'rho': 1000, 'vol': 4}

In place magic methods will also change the property value:

>>> weight_water -= 1000
>>> weight_water
Weight(Water) -> 3000 (kg)
>>> water_data  # The change also affects the original data
{'rho': 1000, 'vol': 3}

Latest source code

The latest development version of free_properties’s sources can be obtained at:

Bug reports

To report bugs, please use the free_properties’ Bug Tracker at:

License information

See LICENSE.txt for information on the terms & conditions for usage of this software, and a DISCLAIMER OF ALL WARRANTIES.

Although not required by the free_properties’ license, if it is convenient for you, please cite free_properties if used in your work. Please also consider contributing any changes you make back, and benefit the community.


To cite free_properties in publications use:

Yoel Cortes-Pena (2019). free_properties: Manage properties outside a class.

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 free_properties, version 0.1.9
Filename, size & hash File type Python version Upload date
free_properties-0.1.9.tar.gz (4.8 kB) View hashes Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page