2017-10-12 2 views
0

Ich habe eine Python-Funktion test(), die Fragen durchläuft und eine Antwort eingibt und die Ergebnisse am Ende einteilt. Ich möchte verschiedene, aber optionale Änderungen an der test() Funktion wie shuffle() den Fragen oder reverse() den Fragen, oder odds_only() usw. übergeben. Wenn ich versuche, diese Funktionen in test() umzusetzen, so , Ich bekomme einen NameError. Kann mir bitte jemand helfen, zu verstehen, wo ich falsch gelaufen bin?NameError beim Übergeben der Funktion als arg

>>> my.test(mod=shuffle) 
... NameError: name 'shuffle' is not defined 


def test(self, mod=None): 
    if mod is not None: 
     return_value = mod() 

def shuffle(self): 
    list_of_questions = list(self.dictionary.keys()) 
    random.shuffle(list_of_questions) 
    return list_of_questions 
+0

Was 'my' ist? Sind "Test" und "Shuffle" Teil einer Klasse? – kindall

+0

ja sie sind alle Teil einer Klasse, meine in diesem Fall ist nur ein Objekt dieser Klasse – GainesvilleJesus

Antwort

2

Wenn beide Tests und Shuffle sind Methoden, die auf der gleichen Klasse, dann sollte der Anruf sein:

my.test(mod=my.shuffle) 
+0

danke, es macht jetzt viel mehr Sinn! – GainesvilleJesus

+0

Wenn ich testen wollte (mod = shuffle) würde ich shuffle() außerhalb der Klasse nehmen und es in say main() schreiben oder wäre es möglich die verfügbaren Mods innerhalb der Testfunktion zu definieren? – GainesvilleJesus

+0

Sie könnten eine Zeichenfolge übergeben und dann 'getattr()' verwenden, um die Methode dieses Namens auf 'self' zu erhalten. – kindall

Verwandte Themen