pythonpython-dataclasses

dataclass __repr__ shows init=False members


import dataclasses

@dataclasses.dataclass
class MyClass:
    a: int
    b: int = dataclasses.field(default=0, init=False)


m = MyClass(a=0)
print(repr(m))
# prints: "MyClass(a=0, b=0)"

# `eval(repr(m))` raises an exception due to unexpected `b=0`.

Shouldn't b be omitted from repr - i.e., eval(repr(m)) shall be able to recreate an instance?

Python 3.13.3


Solution

  • I forgot about the field parameter repr... 🙈 https://docs.python.org/3/library/dataclasses.html#dataclasses.field

    Solution:

    import dataclasses
    
    
    @dataclasses.dataclass
    class MyClass:
        a: int
        b: int = dataclasses.field(default=0, init=False, repr=False)
    
    
    m = MyClass(a=0)
    print(repr(m))
    # prints: "MyClass(a=0)"
    
    m2 = eval(repr(m))
    print(m2)
    # prints: "MyClass(a=0)"