2016-07-28 6 views
-1

Betrachten Sie das folgende Beispiel:gibt es eine Möglichkeit, Parameter an eine Funktionsvariable in Python zu binden?

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() 

Im defintion test ist es mir möglich, eine Variable zu erzeugen, die, wenn die Methode self.testMethod mit dem Parameter "Joe" genannt ruft?

+0

Warum ist das jetzt ein Downvote? Wie auch immer, ich könnte das verbessern? Downvoting ohne eine Ahnung ist nicht wirklich produktiv –

+0

Sie meinen etwas wie: 'def test (selbst, name): ptr = self.testMethod (name)'? Dann kannst du k.test ("Joe") anrufen – marcanuy

+3

Du meinst wie 'von functools import partially', dann' self.callable = partially (self.testMethod, 'Joe') '? –

Antwort

1

Entweder eine functools.partial() object verwenden oder ein lambda Ausdruck:

from functools import partial 

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

oder

ptr = lambda: self.testMethod('Joe') 
+0

Das ist genau das, was ich gesucht habe danke. Als die Antwort markiert –

+0

Es scheint, dass Sie die * andere * Antwort tatsächlich markiert. Das ist deine Wahl, aber dein Kommentar ist in diesem Fall verwirrend :-) –

+0

Sorry abt das. Danke für die Information –

1

Sie einen Namen für den Konstruktor übergeben konnte (und speichern Sie es auf der Klasseninstanz), das Verfahren dann zugänglich ist:

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

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

    def test(self): 
     self.testMethod() 

Wie folgt:

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

Nicht wirklich. Ich bin auf der Suche nach verbindlichen Funktionen. Ich will keinen anderen Ansatz. Der Code, den ich gerade gepostet habe, ist ein einfaches Beispiel. –

Verwandte Themen