This tutorial illustrates the pretty printing feature of PyROOT, which reveals the content of the object if a string representation is requested, e.g., by Python's print statement. The printing behaves similar to the ROOT prompt powered by the C++ interpreter cling.
Author: Stefan Wunsch, Enric Tejedor
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Tuesday, March 19, 2024 at 07:14 PM.
import ROOT
Create an object with PyROOT
obj = ROOT.std.vector("int")(3)
for i in range(obj.size()):
obj[i] = i
Print the object, which reveals the content. Note that print
calls the special
method __str__
of the object internally.
print(obj)
{ 0, 1, 2 }
The output can be retrieved as string by any function that triggers the __str__
special method of the object, e.g., str
or format
.
print(str(obj))
print("{}".format(obj))
{ 0, 1, 2 } { 0, 1, 2 }
Note that the interactive Python prompt does not call __str__
, it calls
__repr__
, which implements a formal and unique string representation of
the object.
print(repr(obj))
obj
vector<int>{ 0, 1, 2 }
vector<int>{ 0, 1, 2 }
The print output behaves similar to the ROOT prompt, e.g., here for a ROOT histogram.
hist = ROOT.TH1F("name", "title", 10, 0, 1)
print(hist)
Name: name Title: title NbinsX: 10
If cling cannot produce any nice representation for the class, we fall back to a
"__repr__
returns
ROOT.gInterpreter.Declare('class MyClass {};')
m = ROOT.MyClass()
print(m)
print(str(m) == repr(m))
<cppyy.gbl.MyClass object at 0x9287e40> True