funktionen einer Klasse in ein anderes File auslagern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tuner
User
Beiträge: 32
Registriert: Sonntag 23. April 2006, 22:17

Hy,

ich moechte der uebersicht halber Funktionen einer klasse in ein anderes File auslagern.

wie mach ich das am besten?

gruss, toni.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Kurz: Die gesammte Klasse in ein anderes Modul stecken.

Lang: Es geht natürlich auch anders, aber die kurze und simpelste Variante ist ganz einfach die beste.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
tuner
User
Beiträge: 32
Registriert: Sonntag 23. April 2006, 22:17

das eine modul ist eigentlich nur die eine klasse.

das muss doch irgendwie gehen.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo

nur, damit wir uns nicht falsch verstehen: Du hast eine Klasse mitsamt allen Funktionen und willst diese auf verschiedene Dateien splitten?

Gruß,
Christian
tuner
User
Beiträge: 32
Registriert: Sonntag 23. April 2006, 22:17

ja, genau.

das waere der uebersicht halber das beste, und wuerde mir viel aufwandt ersparen.


gruss.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Kann ich zwar nicht so recht glauben, aber:

Code: Alles auswählen

# Datei parent.py:

from daughter import bar2

class foo():
    def bar1(self): pass # Funktion in Deiner Klasse
    
    def bar3(self, *args):
        bar2(self, *args)
    
    
#Datei daughter.py:

def bar2(parent, *args):
    pass
Magst Du vielleicht ein bißchen Code zeigen? Vielleicht kann man Dir dann besser helfen. Sehr wahrscheinlich nämlich sitzt Du einem Trugschluß auf.

Gruß,
Christian
BlackJack

Wieviele Methoden hat die Klasse denn? Es gibt natürlich Ausnahmen, aber in der Regel sollten es nicht so viele sein, das man den Wunsch verspürt sie auf mehrere Dateien aufzuteilen.
tuner
User
Beiträge: 32
Registriert: Sonntag 23. April 2006, 22:17

naja, nicht wirklich.. ist nicht mein code.

was ich geplant hatte sah ungefaehr so aus:

Code: Alles auswählen

class parent: 
   ...
   def __tuwas(self, data): 
      ...
   def aktion(self, data):
      text = daughter(data)
      text.getDescription(self)

class daughter:
   def __init__(data):
      self.data = data
      ...
   def getDescription(parent):
      ...
      if parent.__tuwas(data):
...
aber es funktioniert nicht.
AttributeError: daughter: instance has no attribute tuwas ... oder so.

dann habe ich mir gedacht, ob es wirklich wichtig ist, eine neue klasse dafuer zu erstellen. eigentlich nicht, da es nur teilfunktionen sind, aber sher text-intensiv.

geht auch

Code: Alles auswählen

from daughter import *
?

ps: falls das oben eine greueltat ist. ich bin eher (noch) kein richtiger python-programmierer.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi

Bitte zeige Deinen Code - das der hier gezeigte Pseudocode nicht funktionieren kann, kannst Du Dir selber klar machen: Was ist parent? Was wird hier an was übergeben, bzw. nicht übergeben?
tuner hat geschrieben: dann habe ich mir gedacht, ob es wirklich wichtig ist, eine neue klasse dafuer zu erstellen. eigentlich nicht, da es nur teilfunktionen sind, aber sher text-intensiv.
Sehr textintensiv? Womöglich drückt da der Schuh. Sooooo derartig textintensiv, daß man eine Methode auslagern muß, kann sie fast nicht sein. Wetten?
tuner hat geschrieben: geht auch

Code: Alles auswählen

from daughter import *
?

ps: falls das oben eine greueltat ist. ich bin eher (noch) kein richtiger python-programmierer.
Greueltat sicher nicht, aber clever auch nicht ;-) . Du haust Dir auf diese Weise Deinen Namespace zu - spätestens, wenn Deine Skripte laufen lernen und größere Programme entstehen provozierst Du so Fehler. Im interaktiven Modus zum schnellen Testen ist das eine aber eine tolle Sache ...
Und weil Du Dich selber als Anfänger bezeichnest, solltest Du vielleicht doch mal etwas mehr Code sehen lassen ...

Gruß,
Christian
Antworten