Hi Pascal,
First thing to consider, almost all component of pyo are objects, not functions. So, if you print the return of SineLoop, for sure, you will get an instance of the SineLoop class. Now, pyo objects know how to handle signal from other pyo object. At the low level, receiver use the float or double buffer of sample directly. At a higher level (Python), if you want to convert an audio signal to a float value, as Aaron said, there is a getter for this. But the .get() method return the current sample, as a float, at the moment of the call. If you use this method a the init of the script, you'll get the first sample of the buffer initialized to 0s. You should use it in a callback. For Ex.:
a1 = SineLoop(100)
def callback():
a1_as_float = a1.get()
print("Do something with your float...")
# call the function callback every 50 ms
pat = Pattern(callback, 0.05).play()
Anyway, as Aaron said, I'm not sure the conversion is really needed here... "fnb = Sig(value=fn)" convert a float to an audio signal but the output of SineLoop is already an audio signal, so better to use it directly. And pyo object can be use in arithmetic with float, that will return a new audio object handling the computation.
Olivier