2013-04-18 3 views
18

Ich habe eine Klasse, A, die von einer Reihe anderer Klassen geerbt wird. Einige davon haben ein paar Funktionen, die ähnlich sind, und es wäre schön, diese Funktionen irgendwo anders definiert zu haben und von den Klassen aufgerufen zu bekommen, die sie brauchen. Diese Funktionen rufen jedoch Funktionen auf, die in der Superklasse definiert sind.Python - Ist es in Ordnung, selbst an eine externe Funktion zu übergeben

class A(): 
    def imp_func(*args): 
     # called by the child class functions 

Class B(A): 
    def common_func(self): 
     # some stuff 
     self.imp_func(*args) 

Ich habe meine Helferfunktionen erstellt also, die die self object als Argument nehmen und ich kann die imp_func aus dem Inneren der Helferfunktionen aufrufen.

def helper_func(obj, some_args): 
    # some common stuff 
    obj.imp_func(*args) 

class B(A): 
    def common_func(self): 
     # unique stuff 
     helper_func(self, some_args) 

Dies löst das Problem.

Aber sollte ich das tun? Ist das Pythonic?

+3

Es gibt absolut kein Problem damit. 'self' ist * nur * ein Verweis auf die Instanz, es ist nicht privat und es ist nicht gefährlich, es an andere Funktionen weiterzugeben. –

+3

Warum müssen Sie das tun? 'B' erbt' imp_func' von 'A', so dass Sie' self.imp_func (* args) 'in' B.common_func' ohne Probleme aufrufen können. –

+0

@FlorianBrucker Es gibt nicht nur eine Funktion, sondern ein paar, die von der Elternklasse aufgerufen werden, und einige werden mehrmals in mehreren Funktionen in mehreren Klassen aufgerufen. Dies führt zu sehr aufgeblähten Klassen und Funktionen. Es ist auch zeitaufwendig, diese Funktionen zu schreiben. Durch die Verwendung von Hilfsklassen sparen Sie Zeit und Aufwand und machen den Code sauberer und wartungsfreundlicher. – elssar

Antwort

24

Es gibt kein Problem damit. Instanzen von self werden ständig an Funktionen (und Methoden anderer Klassen) übergeben.

Verwandte Themen