It's not really specific to object-oriented languages since:
- some OO languages allow multiple return values, such as Python.
- some non-OO languages only allow a single return value, such as C.
The question is more about static vs. dynamic typing. In a statically typed language, a function can only return one value because that is its static return type. Note that this return type can actually be a container of multiple values, such as an array, but it's still one object.
By contrast, a Python method can return a different number of values, because its return type is determined at run-time. So for instance you can have:
def foo(a):
if a > 10:
return 0
else:
return 1, False
number, boolean = foo(10)
print num, boolean
...which doesn't make any practical sense, but demonstrate that a function can have a varying number of return values. When you look under the hood, however, this turns out to be just a syntactic shortcut: what actually happens when you return multiple values is that Python creates a tuple on-the-fly and returns that single object. So the following code is also valid:
returnValues = foo(10)
print returnValues[0], returnValues[1]
As it turns out, in a sense, a function always has one return value, even in Python if you look at how it's implemented. That's because the concept of a function originates in mathematics, where a function is a mapping between values of a certain set and values of another set. However, dynamically typed languages somehow bypass this limitation by allowing you to write code as if a function returned multiple values.