A naive implementation of C3 linearization algorithm used in Python's MRO
Project description
C3 Linearization Algorithm
c3linear
is a naïve implementation of
C3 linearization
algorithm. C3 used in Python 2.3+ for
Method Resolution Order.
See Raymond Hettinger's
Python’s super() considered super!
for more information.
Motivation
The project has come to life as a byproduct of debugging an overcomplicated hierarchy of mixin classes. I thought I knew how exactly MRO is computed, but it turned out I didn't.
I've tried to keep the code idiomatic and easy to follow at the expense of performance. The project is really took a couple of hours to complete. Although I didn't care about time complexity and didn't check correctness as thoroughly as I should, I think the project may help someone who wants to learn how Python's Method Resolution Order works.
Usage
Library
- Get the code and install it with
python setup.py install
(Python 3.6+ required) - Import
from c3linear.mro import mro
- Check against built-in MRO:
>>> class A: pass
>>> class B(A): pass
>>> mro(B) == B.mro()
True
Take a look at tests
for more examples.
Testing
- Install dependencies:
pip install -e .
- (Optional) Install extra packages:
pip install -e .[extra]
- Run tests with:
python setup.py test
- Run
flake8
for PEP8 compliance testing:
python setup.py flake8
- Run
mypy
:
mypy c3linear/
Contributing
If you've found a bug, please open an issue describing the problem first.
Licence
The project is licensed under MIT License. For further information see
LINCENSE
file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file c3linear-0.1.1.tar.gz
.
File metadata
- Download URL: c3linear-0.1.1.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f2c58d7e47d5b55788092e6eee23b937d56c6af14a404ac11f0cff39cb2c192 |
|
MD5 | 3f80aafc9eea9474a65059aa4b43ed94 |
|
BLAKE2b-256 | 3b60f34b2300987e1bd7f81cbf1bdd1e0830e94ef061a6e5373a6ae7d333fc96 |
File details
Details for the file c3linear-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: c3linear-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a13317aa4cee953638409fda054979960aed54873fb34cf2b41a341ca5cec3f |
|
MD5 | c7d51d7768158fc0947f5a52a36bdc46 |
|
BLAKE2b-256 | d2df439be04fae57dee88c386e3067678da6dbbea90c90ea3488868e2d84ee1d |