diff --git a/kwant/system.py b/kwant/system.py
index d725359764ee4e2299743a3a3dd08de2461e45e1..e6dd5ddf1078db833cd3f7eed0fa808a23a2e280 100644
--- a/kwant/system.py
+++ b/kwant/system.py
@@ -70,6 +70,20 @@ class System(metaclass=abc.ABCMeta):
         return DiscreteSymmetry()
 
 
+    def __str__(self):
+        items = [
+            # (format, extractor, skip if info not present)
+            ('{} sites', self.graph.num_nodes, False),
+            ('{} hoppings', self.graph.num_edges, False),
+            ('parameters: {}', tuple(self.parameters), True),
+        ]
+        # Skip some information when it's not present (parameters)
+        details = [fmt.format(info) for fmt, info, skip in items
+                   if (info or not skip)]
+        details = ', and '.join((', '.join(details[:-1]), details[-1]))
+        return '<{} with {}>'.format(self.__class__.__name__, details)
+
+
 # Add a C-implemented function as an unbound method to class System.
 System.hamiltonian_submatrix = _system.HamiltonianSubmatrix()