Before calling _PyType_Lookup() the type needs to be initialized.
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 9bbf64b..d087e9c 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -1383,6 +1383,11 @@
                 kwlist, &number, &ndigits))
                 return NULL;
 
+	if (Py_Type(number)->tp_dict == NULL) {
+		if (PyType_Ready(Py_Type(number)) < 0)
+			return NULL;
+	}
+
 	if (round_str == NULL) {
 		round_str = PyUnicode_FromString("__round__");
 		if (round_str == NULL)
@@ -1497,6 +1502,11 @@
 	static PyObject *trunc_str = NULL;
 	PyObject *trunc;
 
+	if (Py_Type(number)->tp_dict == NULL) {
+		if (PyType_Ready(Py_Type(number)) < 0)
+			return NULL;
+	}
+
 	if (trunc_str == NULL) {
 		trunc_str = PyUnicode_FromString("__trunc__");
 		if (trunc_str == NULL)