Skip to main content

Utilities for making useful string representations of objects.

Project description

Last release Python version Test status Test coverage Last commit

reprfunc is a library that makes it easier to implement __repr__() for your classes. It implements a few common repr strategies (e.g. mimicking the contructor, getting values from a custom dunder method, displaying a hard-coded list of object attributes) and allows you use them simply by assigning to __repr__.

Installation

Install reprfunc from PyPI:

$ pip install reprfunc

Version numbers obey semantic versioning.

Examples

Make a repr-string that matches the arguments to the constructor:

>>> from reprfunc import *
>>> class MyObj:
...
...     def __init__(self, a, b):
...         self.a = a
...         self.b = b
...
...     __repr__ = repr_from_init
...
>>> MyObj(1, 2)
MyObj(a=1, b=2)

The same as above, but also demonstrating some knobs for controlling the output:

>>> class MyObj:
...
...     def __init__(self, a, b, c, d=None, _state={}):
...         self.a = a
...         self._b = b
...         self.c = c
...         self.d = d
...         self._state = _state
...
...     __repr__ = repr_from_init(
...         # This option lets you explicitly map argument names to either
...         # attribute names, or callables that accept the object in
...         # question as their only argument.
...         attrs={'b': '_b'},
...
...         # These options allows you to exclude certain arguments from the
...         # repr-string.  The first is unconditional, and the second
...         # depends on the value of the given function.  By default,
...         # attributes with the same value as the default (like `d` in this
...         # example) will be skipped automatically.  Note that the
...         # predicate can be `True` to unconditionally include an argument,
...         # even if it still has its default value.
...         skip=['_state'],
...         predicates={'c': bool},
...
...         # This option allows you to specify that certain arguments should
...         # be rendered using the "positional" syntax.  Positional-only
...         # arguments are rendered this way by default.
...         positional=['a'],
...     )
>>> MyObj(1, 2, 0, _state={3: 4})
MyObj(1, b=2)

Make a repr-string that gets its values from a __reprargs__() method defined by the object in question:

>>> class MyObj:
...
...     def __init__(self, a, b):
...         self.a = a
...         self.b = b
...
...     def __reprargs__(self):
...         # This function should return a list and a dictionary.  Any
...         # values in the list will be rendered as positional arugments,
...         # and any items in the dictionary will be rendered as keyword
...         # arguments.
...         return [self.a], {'b': self.b}
...
...     __repr__ = repr_from_dunder
...
>>> MyObj(1, 2)
MyObj(1, b=2)

Make a repr-string from a hard-coded list of attributes:

>>> class MyObj:
...
...     def __init__(self, a, b):
...         self.a = a
...         self.b = b
...
...     # Note that 'b' is specified twice here.  You can avoid this by
...     # specifying ``b=Key()``.
...     __repr__ = repr_from_attrs('a', b='b')
...
>>> MyObj(1, 2)
MyObj(1, b=2)

Use ReprBuilder to help formatting bespoke repr-strings. You can think of this class as a collection of positional and keyword arguments that knows how to format itself. It provides many more methods for registering positional/keyword arguments beyond what’s demonstrated here, so consult the source code if this seems useful:

>>> class MyObj:
...
...    def __init__(self, a, b):
...        self.a = a
...        self.b = b
...
...    def __repr__(self):
...        builder = ReprBuilder(self)
...        builder.add_positional_attr('a')
...        builder.add_keyword_attr('b')
...        return str(builder)
...
>>> MyObj(1, 2)
MyObj(1, b=2)

Alternatives

There are several other libraries out there that help with formatting repr-strings. Overall, the reason I wrote reprfunc was to make something more flexible and more succinct than the alternatives.

  • represent: This is a pretty similar library overall. The main difference is that it uses class decorators and/or inheritance to add its repr functions to your objects. One big advantage of this approach is that it allows “pretty-print” reprs for IPython to be added at the same time, but it also has a heavier feel.

  • reprutils: This is also a pretty similar library, but it only supports the equivalent of repr_from_attrs().

  • reprtools: This library doesn’t have much documentation, but seems to be mostly superseded by f-strings.

Project details


Download files

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

Source Distribution

reprfunc-0.1.0.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

reprfunc-0.1.0-py2.py3-none-any.whl (5.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file reprfunc-0.1.0.tar.gz.

File metadata

  • Download URL: reprfunc-0.1.0.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/35.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.11.4 keyring/23.5.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.13

File hashes

Hashes for reprfunc-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4a4d6bacae49c46fed0858a84002deec10dfb9291561defba3b80bc7b1ccf68c
MD5 414fa167b558c7990aa0df9156904c1b
BLAKE2b-256 6d7082c6895aa66f0caff7efd3744c26fa3d6465c30f397ebbb1b9e1bbfbcae8

See more details on using hashes here.

File details

Details for the file reprfunc-0.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: reprfunc-0.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 5.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/35.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.11.4 keyring/23.5.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.13

File hashes

Hashes for reprfunc-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0380b2133ad0c6377a2588dc1a7463d9798ea7347ac838b5b31134a098b32a2c
MD5 d4081b2bbba13524b143259656617e00
BLAKE2b-256 f3101318ea549bd2c0255ee1be416c8972e100ef89650ac12bf970780c0f5a57

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page