https://github.com/gidona18/protoclass
Prototype-Oriented Programming in Python at the tip of your fingers in a simple, easy-to-use library.
https://github.com/gidona18/protoclass
object-oriented object-oriented-programming prototypal-inheritance prototype prototypes
Last synced: about 2 months ago
JSON representation
Prototype-Oriented Programming in Python at the tip of your fingers in a simple, easy-to-use library.
- Host: GitHub
- URL: https://github.com/gidona18/protoclass
- Owner: gidona18
- License: apache-2.0
- Created: 2020-05-04T22:47:19.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-07-03T16:10:06.000Z (over 5 years ago)
- Last Synced: 2024-06-07T00:09:40.725Z (almost 2 years ago)
- Topics: object-oriented, object-oriented-programming, prototypal-inheritance, prototype, prototypes
- Language: Python
- Homepage:
- Size: 276 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
protoclass - *Prototype-Oriented Programming in Python.*
========================================================
`Prototype-Oriented Programming `_ in Python at the tip of your fingers in a simple, easy-to-use library.
|PyPI-package-version| |PyPI-license| |PyPI-python-versions| |travis-ci| |readthedocs| |PyPI-downloads-month|
Installation
------------
``pip install protoclass``
Usage
-----
.. code:: python
>>> from protoclass import proto
# We create a basic object and add some functionality
>>> jane = proto(first="Jane", last="Doe")
>>> jane.greet = lambda self: print(self)
>>> jane.greet() #doctest: +ELLIPSIS
# A more user-friendly would be better.
# We could modify the `greet` function
# or we could create another object and inherit from it
>>> person = proto(first="", last="")
>>> person.__str__ = lambda self: f"{self.first} {self.last}"
>>> jane = jane.chain(person)
# and we should get a better message.
>>> jane.greet()
Jane Doe
API Reference
-------------
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| **proto(\*\*attrs)** |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Makes a new prototype with given attributes. |
| An empty prototype will be made when no attributes are given. |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| **proto.chain(self, other, \*others)** |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Makes self copy attributes from another prototype or multiple other prototypes. |
| Any previous relationship with other parent prototypes will be automatically severed. |
| When parent prototypes share attributes with the same name, the first parent prototype that has that attribute will be provide it, so the order in which they are given matters. |
| Any change made to parent prototypes will be automatically propagated to this prototype. |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| **clone(other, \*others)** |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Makes a new prototype by copying attributes from another prototype or multiple other prototypes. |
| When parent prototypes share attributes with the same name, the first parent prototype that has that attribute will be provide it, so the order in which they are given matters. |
| Any change made to parent prototypes will be automatically propagated to this clone. |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
For more information on these functions, call ``help`` on the function
you would like to know more of, like this: ``help(proto)``.
You can also read the docs_.
Contributing
------------
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
.. |made-with-python| image:: https://img.shields.io/badge/Made%20with-Python-1f425f.svg
:target: https://www.python.org/
.. |PyPI-downloads-month| image:: https://img.shields.io/pypi/dm/protoclass.svg
:target: https://pypi.python.org/pypi/protoclass/
.. |PyPI-package-version| image:: https://img.shields.io/pypi/v/protoclass.svg
:target: https://pypi.python.org/pypi/protoclass/
.. |PyPI-license| image:: https://img.shields.io/pypi/l/protoclass.svg
:target: https://pypi.python.org/pypi/protoclass/
.. |PyPI-python-versions| image:: https://img.shields.io/pypi/pyversions/protoclass.svg
:target: https://pypi.python.org/pypi/protoclass/
.. |travis-ci| image:: https://travis-ci.com/jellowfish/protoclass.svg?branch=master
:target: https://travis-ci.com/jellowfish/protoclass
.. |readthedocs| image:: https://readthedocs.org/projects/protoclass-jf/badge/?version=latest
:target: http://protoclass-gidona18.readthedocs.io/?badge=latest
.. _docs: https://protoclass-gidona18.readthedocs.io/en/latest/protoclass.html