Being tired manually implementing a string representation for my classes, I was wondering if there is a pythonic way to do that automatically.
I would like to have an output that covers all the attributes of the class and the class name. Here is an example:
class Foo(object): attribute_1 = None attribute_2 = None def __init__(self, value_1, value_2): self.attribute_1 = value_1 self.attribute_2 = value_2
Resulting in:
bar = Foo("baz", "ping") print(str(bar)) # desired: Foo(attribute_1=baz, attribute_2=ping)
This question came to mind after using Project Lombok @ToString in some Java projects.
You can iterate instance attributes using vars
, dir
, ...:
def auto_str(cls): def __str__(self): return '%s(%s)' % ( type(self).__name__, ', '.join('%s=%s' % item for item in vars(self).items()) ) cls.__str__ = __str__ return cls @auto_str class Foo(object): def __init__(self, value_1, value_2): self.attribute_1 = value_1 self.attribute_2 = value_2
Applied:
>>> str(Foo('bar', 'ping')) 'Foo(attribute_2=ping, attribute_1=bar)'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With