{ "info": { "author": "sobolevn", "author_email": "mail@sobolevn.me", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# final_class\n\n[![wemake.services](https://img.shields.io/badge/-wemake.services-green.svg?label=%20&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAbUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2F%2F%2F5TvxDIAAAAIdFJOUwAjRA8xXANAL%2Bv0SAAAADNJREFUGNNjYCAIOJjRBdBFWMkVQeGzcHAwksJnAPPZGOGAASzPzAEHEGVsLExQwE7YswCb7AFZSF3bbAAAAABJRU5ErkJggg%3D%3D)](https://wemake.services) [![Build Status](https://travis-ci.org/moscow-python-beer/final-class.svg?branch=master)](https://travis-ci.org/moscow-python-beer/final-class) [![Coverage Status](https://coveralls.io/repos/github/moscow-python-beer/final-class/badge.svg?branch=master)](https://coveralls.io/github/moscow-python-beer/final-class?branch=master) [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide)\n\nFinal classes for `python3.6+`.\n\n\n## Features\n\n- No metaclass conflicts\n- No runtime overhead\n- No dependencies\n- Type hints included, [PEP-561](https://www.python.org/dev/peps/pep-0561/) and [PEP-591](https://www.python.org/dev/peps/pep-0591/) compatible\n- Designed to be as simple as possible\n\n\n## Why?\n\nIn languages like `java` we have a nice way\nto restrict subclassing any class by making it `final`:\n\n```java\npublic final class SomeClass {\n // ...\n}\n```\n\nIn `python` we don't have such feature out of the box.\nThat's where `final_class` library comes in!\n\nThis package works perfectly with `@final` from `typing`.\nSo, with `final_class` you will have both type-checking and runtime checks.\n\n## Installation\n\n```bash\npip install final_class\n```\n\n\n## Usage\n\n```python\nfrom final_class import final\n\n\n@final\nclass Example(object): # You won't be able to subclass it!\n ...\n\n\nclass Error(Example): # Raises `TypeError`\n ...\n```\n\n## More?\n\nDo you want more? Check out:\n\n- [1-minute guide to real constants in Python](https://sobolevn.me/2018/07/real-python-contants)\n\n\n## License\n\nMIT.\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/moscow-python-beer/final-class", "keywords": "oop,oop-principles,final-classes,wemake.services,final,final classes,typing", "license": "MIT", "maintainer": "sobolevn", "maintainer_email": "mail@sobolevn.me", "name": "final-class", "package_url": "https://pypi.org/project/final-class/", "platform": "", "project_url": "https://pypi.org/project/final-class/", "project_urls": { "Homepage": "https://github.com/moscow-python-beer/final-class", "Repository": "https://github.com/moscow-python-beer/final-class" }, "release_url": "https://pypi.org/project/final-class/0.2.0/", "requires_dist": [ "typing_extensions (>=3.7,<4.0)" ], "requires_python": ">=3.6,<4.0", "summary": "Final classes for Python 3", "version": "0.2.0" }, "last_serial": 5795531, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "292aa63f39234842aa167e6fee58775c", "sha256": "fc94c2b314cabe528d7cb02684eccd2eb9b238535140f1cacd25ed61468eadcd" }, "downloads": -1, "filename": "final_class-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "292aa63f39234842aa167e6fee58775c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 3498, "upload_time": "2018-07-11T09:31:23", "url": "https://files.pythonhosted.org/packages/c7/ce/25444296e5c8537946986eee8594ce166eddf9e19d1a59d592625c13fa6a/final_class-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93dd236681bed1dda5138ca280fbc2df", "sha256": "14d500364cf8eab8e59f50be48eff0a9ffb5bc11dfe632626de8e93dded778df" }, "downloads": -1, "filename": "final-class-0.1.0.tar.gz", "has_sig": false, "md5_digest": "93dd236681bed1dda5138ca280fbc2df", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 2806, "upload_time": "2018-07-11T09:31:21", "url": "https://files.pythonhosted.org/packages/f1/d2/77eaced776f10802595f58459439b7a44fb882a878c97d9b06bd7b1b4d9a/final-class-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f0b81f24e668a8bd370d66669a1ff58d", "sha256": "bb408336423c34c280500f207ea6ae430b0b5e4f76213dc6e0a4a0d43a1498b5" }, "downloads": -1, "filename": "final_class-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f0b81f24e668a8bd370d66669a1ff58d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 3488, "upload_time": "2018-07-11T10:35:15", "url": "https://files.pythonhosted.org/packages/1c/16/3de69ef55fd16757200634bc0f98b24bf53f36fb3969a2510600ad4e5229/final_class-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd195981ad4dab85534d14a9b1e7c011", "sha256": "5b00528e42eb8ea20e44e0fbf3e4b708ea1bf31e1c6987f5868a9fba3684d42c" }, "downloads": -1, "filename": "final-class-0.1.1.tar.gz", "has_sig": false, "md5_digest": "cd195981ad4dab85534d14a9b1e7c011", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 2815, "upload_time": "2018-07-11T10:35:14", "url": "https://files.pythonhosted.org/packages/b6/4b/669de17c50f1f5f984c5e38c7b8acf2d8e2978c9b09cff092b8c4806a8a9/final-class-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "73ffa85f7a87fe7824c2d5d2e00b14cd", "sha256": "ef3d462e5ef0ee104403bea95cb0675dcb84525d6b4e74cf2fefef24f4f8716f" }, "downloads": -1, "filename": "final_class-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "73ffa85f7a87fe7824c2d5d2e00b14cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 3497, "upload_time": "2018-08-10T08:38:55", "url": "https://files.pythonhosted.org/packages/66/4a/e4fdcc82f7eccc558881444b45c5babfd27a7d670cec4d1eb7105f8f637d/final_class-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d17b42cf4ee11915321c0654bd11698", "sha256": "b4f180dadb90cc8c0228d6b6e4b41398bc885cc13c7e99c545fa12478c0d66ce" }, "downloads": -1, "filename": "final-class-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0d17b42cf4ee11915321c0654bd11698", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 2822, "upload_time": "2018-08-10T08:38:53", "url": "https://files.pythonhosted.org/packages/d7/50/b549e8551aceea41e8be014fc689afe6e6f099adc68e59878433b2b5096b/final-class-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "8cb2555e23ec89b17c1ca1598febe578", "sha256": "1d4712c477f1316454608938f38d8e60724c8c70aa60627bec748987d6c1ff1c" }, "downloads": -1, "filename": "final_class-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "8cb2555e23ec89b17c1ca1598febe578", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4161, "upload_time": "2019-07-16T14:16:23", "url": "https://files.pythonhosted.org/packages/df/44/eca224f4df296e564ca365a087cc0688b2ed54694df64602795377ba261c/final_class-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a12135527935a47f83ff932b6cf3cd98", "sha256": "42ec7fd076902022364c975feeb285c7e3a3821e632c04f6c7116040409ef8e4" }, "downloads": -1, "filename": "final-class-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a12135527935a47f83ff932b6cf3cd98", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3129, "upload_time": "2019-07-16T14:16:20", "url": "https://files.pythonhosted.org/packages/86/5e/415aac0681d1fbe7b933f70e2f8aa8f5dfe9d0f5467f99008e799f5bafd5/final-class-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1cc4b896d54dad29d2f742d261911919", "sha256": "8029b75b96e8b50ae5d80a6b2b9683fabea94182861101ee185298d13292a322" }, "downloads": -1, "filename": "final_class-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1cc4b896d54dad29d2f742d261911919", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4546, "upload_time": "2019-09-07T09:12:33", "url": "https://files.pythonhosted.org/packages/47/4f/d80eec39dba3f9f0d90d275d073de3907492f599e735075ee9fafbe7d77b/final_class-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ad62d0cbd927c760017ada302449240", "sha256": "ae1c4532745aa35867bd7b6dba4d9eb1798c609b0b22d531733372fef32164a7" }, "downloads": -1, "filename": "final-class-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0ad62d0cbd927c760017ada302449240", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3509, "upload_time": "2019-09-07T09:12:31", "url": "https://files.pythonhosted.org/packages/29/06/42b63be59b0fd3ee6aeb082f99a0bb9967d0f5ee480f9e9c74b7d6455f3d/final-class-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1cc4b896d54dad29d2f742d261911919", "sha256": "8029b75b96e8b50ae5d80a6b2b9683fabea94182861101ee185298d13292a322" }, "downloads": -1, "filename": "final_class-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1cc4b896d54dad29d2f742d261911919", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4546, "upload_time": "2019-09-07T09:12:33", "url": "https://files.pythonhosted.org/packages/47/4f/d80eec39dba3f9f0d90d275d073de3907492f599e735075ee9fafbe7d77b/final_class-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ad62d0cbd927c760017ada302449240", "sha256": "ae1c4532745aa35867bd7b6dba4d9eb1798c609b0b22d531733372fef32164a7" }, "downloads": -1, "filename": "final-class-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0ad62d0cbd927c760017ada302449240", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3509, "upload_time": "2019-09-07T09:12:31", "url": "https://files.pythonhosted.org/packages/29/06/42b63be59b0fd3ee6aeb082f99a0bb9967d0f5ee480f9e9c74b7d6455f3d/final-class-0.2.0.tar.gz" } ] }