A function acts on an argument passed in to it. It is in global scope, usually (if it is a built-in, such as len()). A method acts on an argument in the context of an owner object defined by a class. "something" is defined by the String class, so has string methods (methods defined in the class) at its disposal. The argument may be internal, as in a property of the class instance, such as,
# do something with `param`
The above is a function.
def __init__(self, prop1, prop2):
self.prop1 = prop1
self.prop2 = prop2
In the above,
say_prop2 are methods accessible to instances of the class.