Skip to main content

A tool for measuring Python class cohesion.

Project description


Build Status Build Status Coverage Status Python Versions PyPI Version

Cohesion is a tool for measuring Python class cohesion.

In computer programming, cohesion refers to the degree to which the elements of a module belong together. Thus, cohesion measures the strength of relationship between pieces of functionality within a given module. For example, in highly cohesive systems functionality is strongly related.

When cohesion is high, it means that the methods and variables of the class are co-dependent and hang together as a logical whole.

  • Clean Code pg. 140

Some of the advantages of high cohesion, also by Wikipedia:

  • Reduced module complexity (they are simpler, having fewer operations).
  • Increased system maintainability, because logical changes in the domain affect fewer modules, and because changes in one module require fewer changes in other modules.
  • Increased module reusability, because application developers will find the component they need more easily among the cohesive set of operations provided by the module.


$ pip install cohesion
$ cohesion -h


$ git clone
$ cd cohesion
$ PYTHONPATH=lib/ python -m cohesion -h


Cohesion measures class and instance variable usage across the methods of that class.

$ cat
class ExampleClass1(object):
    class_variable1 = 5
    class_variable2 = 6

    def func1(self):
        self.instance_variable = 6

        def inner_func(b):
            return b + 5

        local_variable = self.class_variable1

        return local_variable

    def func2(self):

    def func3(variable):
        return variable + 7

class ExampleClass2(object):
    def func1(self):
        self.instance_variable1 = 7
$ cohesion --files --verbose
  Class: ExampleClass1 (1:0)
    Function: func1 2/3 66.67%
      Variable: class_variable1 True
      Variable: class_variable2 False
      Variable: instance_variable True
    Function: func2 1/3 33.33%
      Variable: class_variable1 False
      Variable: class_variable2 True
      Variable: instance_variable False
    Function: func3 0/3 0.00%
      Variable: class_variable1 False
      Variable: class_variable2 False
      Variable: instance_variable False
    Total: 33.33%
  Class: ExampleClass2 (23:0)
    Function: func1 1/1 100.00%
      Variable: instance_variable1 True
    Total: 100.00%

The --below and --above flags can be specified to only show classes with a cohesion value below or above the specified percentage, respectively.

Flake8 Support

You can now lint Python files for classes with low cohesion with flake8! First, ensure your installation has registered cohesion:

$ flake8 --version
3.2.1 (pyflakes: 1.0.0, cohesion: 0.8.0, pycodestyle: 2.2.0, mccabe: 0.5.3) CPython 2.7.12 on Linux

And now use flake8 to lint your file with the extension enabled:

$ flake8 --enable-extension=H60 H601 class has low cohesion

Python Versions

If you would like to simultaneously run Cohesion on Python 2 and Python 3 code then you will have to install it for both versions. I.e.

$ pip2 install cohesion
$ pip3 install cohesion

Then use the corresponding version to run the module:

$ python2 -m cohesion --files
$ python3 -m cohesion --files


First, install development packages:

$ pip install -r requirements-dev.txt


$ nose2


$ flake8


$ nose2 --with-coverage

Project details

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
cohesion-0.9.1-py2.py3-none-any.whl (8.6 kB) Copy SHA256 hash SHA256 Wheel py2.py3

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