Throw TypeError when subclasses forget to call __init__ (#2152)

- Fixes #2103
diff --git a/tests/test_class.py b/tests/test_class.py
index e58fef6..9807535 100644
--- a/tests/test_class.py
+++ b/tests/test_class.py
@@ -101,6 +101,27 @@
     assert "No constructor defined!" in str(excinfo.value)
 
 
+def test_inheritance_init(msg):
+
+    # Single base
+    class Python(m.Pet):
+        def __init__(self):
+            pass
+    with pytest.raises(TypeError) as exc_info:
+        Python()
+    assert msg(exc_info.value) == "m.class_.Pet.__init__() must be called when overriding __init__"
+
+    # Multiple bases
+    class RabbitHamster(m.Rabbit, m.Hamster):
+        def __init__(self):
+            m.Rabbit.__init__(self, "RabbitHamster")
+
+    with pytest.raises(TypeError) as exc_info:
+        RabbitHamster()
+    expected = "m.class_.Hamster.__init__() must be called when overriding __init__"
+    assert msg(exc_info.value) == expected
+
+
 def test_automatic_upcasting():
     assert type(m.return_class_1()).__name__ == "DerivedClass1"
     assert type(m.return_class_2()).__name__ == "DerivedClass2"