2017-07-24 1 views
1

Ich mache Klassen, die ähnlich sind, aber mit unterschiedlichen Funktionen, abhängig von der Verwendung der Klasse.Hinzufügen von Methoden in __init __() in Python

class Cup: 
    def __init__(self, content): 
     self.content = content 

    def spill(self): 
     print(f"The {self.content} was spilled.") 

    def drink(self): 
     print(f"You drank the {self.content}.") 

Coffee = Cup("coffee") 
Coffee.spill() 
> The coffee was spilled. 

Jedoch wird bei der Initialisierung eines Objekts bekannt, ob oder ob nicht der Becher verschüttet werden oder getrunken. Wenn es viele Becher gibt, müssen nicht alle beide Funktionen haben, da nur einer von ihnen verwendet wird. Wie kann ich während der Initialisierung eine Funktion hinzufügen?

Intuitiv sollte es so etwas wie diese, aber dies offenbar nicht funktioniert hat:

def spill(self): 
    print(f"The {self.content} was spilled.") 

class Cup: 
    def __init__(self, content, function): 
     self.content = content 
     self.function = function 

Coffee = Cup("coffee", spill) 
Coffee.function() 
> The coffee was spilled 

Antwort

2

Wenn Sie eine Klasse in Python mit Methoden erstellen z.B.

class A 
    def method(self, param1, param) 

Es wird sicherstellen, dass, wenn Sie A().method(x,y) nennen es den self Parameter mit Instanz von A. füllen Wenn Sie versuchen Methode angeben, sich außerhalb des class dann müssen Sie auch sicherstellen, dass die Bindung richtig gemacht wird.

import functools 
class Cup: 
    def __init__(self, content, function): 
     self.content = content 
     self.function = functools.partial(function, self) 
Verwandte Themen