I know that in Python that if, say you want to pass two parameters to a function, one an object, and another that specifies the instance method that must be called on the object, the user can easily pass the object itself, along with the name of the method (as a string) then use the getattr function on the object and the string to call the method on the object.
Now, I want to know if there is a way (as in C++, for those who know) where you pass the object, as well as the actual method (or rather a reference to the method, but not the method name as a string). An example:
def func(obj, method):
obj.method();
I have tried passing it as follows:
func(obj, obj.method)
or as
func(obj, classname.method)
but neither works (the second one I know was a bit of a long shot, but I tried it anyway)
I know that you can also just define a function that just accepts the method, then call it as
func2(obj.method)
but I am specifically asking about instances where you want a reference to the object itself, as well as a reference to a desired class instance (not static) method to be called on the object.
EDIT:
For those that are interested, I found quite an elegant way 'inspired' by the accepted answer below. I simply defined func as
def func(obj, method):
#more code here
method(obj, parameter); #call method on object obj
and called it as
func(obj_ref, obj_class.method);
where obj_class is the actual class that obj_ref is an instance of.
A method is just a function with the first parameter bound to an instance. As such you can do things like.
# normal_call
result = "abc".startswith("a")
# creating a bound method
method = "abc".startswith
result = method("a")
# using the raw function
function = str.startswith
string = "abc"
result = function(string, "a")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With