diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -44,7 +44,7 @@
 AMBIGUOUS_TIME = -1
 
 
-@attr.s(slots=True)
+@attr.s(slots=True, init=False)
 class DirstateItem(object):
     """represent a dirstate entry
 
@@ -61,6 +61,12 @@
     _size = attr.ib()
     _mtime = attr.ib()
 
+    def __init__(self, state, mode, size, mtime):
+        self._state = state
+        self._mode = mode
+        self._size = size
+        self._mtime = mtime
+
     def __getitem__(self, idx):
         if idx == 0 or idx == -4:
             msg = b"do not use item[x], use item.state"