0

Consider the following example:

class foo:
    def __init__(self):
        print ("Constructor")
    def testMethod(self,val):
        print ("Hello " + val)
    def test(self):
        ptr = self.testMethod("Joe") <---- Anyway instead of calling self.testMethod with parameter "Joe" I could simple bind the parameter Joe to a variable ?
        ptr()

k = foo()
k.test()

In the defintion test is it possible for me to create a variable which when called calls the method self.testMethod with the parameter "Joe" ?

6
  • Why is this a downvote now ? Anyway i could improve this ? Downvoting without a clue isnt really productive Commented Jul 28, 2016 at 22:04
  • You mean something like: def test(self, name): ptr=self.testMethod(name) ? Then you can call k.test("Joe") Commented Jul 28, 2016 at 22:07
  • 4
    You mean like from functools import partial, then self.callable = partial(self.testMethod, 'Joe')? Commented Jul 28, 2016 at 22:10
  • yes partial is what I am looking equivalent to std::bind in C++ Commented Jul 28, 2016 at 22:11
  • I would love to know why someone gave me a downvote though on a totally logical question Commented Jul 28, 2016 at 22:16

2 Answers 2

1

Either use a functools.partial() object or a lambda expression:

from functools import partial

ptr = partial(self.testMethod, 'Joe')

or

ptr = lambda: self.testMethod('Joe')
Sign up to request clarification or add additional context in comments.

3 Comments

Thats exactly what i was looking for thank you. Marked as the answer
It appears you marked the other answer, actually. That's your choice entirely but your comment is confusing in that case :-)
Sorry abt that. Thanks for letting me know
1

You could pass a name to the constructor (and store it on the class instance), this is then accessible to methods:

class Foo:
    def __init__(self, name):
        print("Constructor")
        self.name = name

    def testMethod(self):
        print("Hello " + self.name)

    def test(self):
        self.testMethod()

As follows:

k = Foo("Joe")
k.test()          # prints: Hello Joe

1 Comment

Not really. I am looking for binding functionality. I dont want any other approach. The code i just posted is a simple example.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.