From cdd47a2753fe549a51c59ba858d3f411a9e8de33 Mon Sep 17 00:00:00 2001
From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch>
Date: Tue, 11 Dec 2018 14:33:47 +0100
Subject: [PATCH] [ROOT-9859] Fall back to __repr__ in __str__ if cling returns
 an address

---
 bindings/pyroot/src/Pythonize.cxx | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/bindings/pyroot/src/Pythonize.cxx b/bindings/pyroot/src/Pythonize.cxx
index c4e9b944411..1a4226e6722 100644
--- a/bindings/pyroot/src/Pythonize.cxx
+++ b/bindings/pyroot/src/Pythonize.cxx
@@ -2272,7 +2272,13 @@ namespace {
       Py_XDECREF(cppname);
 
       std::string printResult = gInterpreter->ToString(className.c_str(), self->GetObject());
-      return PyROOT_PyUnicode_FromString(printResult.c_str());
+      if (printResult.find("@0x") == 0) {
+         // Fall back to __repr__ if we just get an address from cling
+         auto method = PyObject_GetAttrString((PyObject*)self, "__repr__");
+         return PyObject_CallObject(method, nullptr);
+      } else {
+         return PyROOT_PyUnicode_FromString(printResult.c_str());
+      }
    }
 
    //- Adding array interface to classes ---------------
-- 
GitLab