Base-Klasse parametrisieren?

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
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

Hi!

Ich habe folgendes Problem: ich hab Code geschrieben, der einige Berechnungen durchfuehrt. Es gibt Klases mit der Grundimplementierung mit NumPy, und eine optimierte Implementierung, welche auf der GPU rechnet.

Die optimierte Implementierung leite ich von der NumPy-Implementierung ab, damit ich einige Komfortfunktionen zum Laden, Speichern und Darstellen der Ergebnisse/Parameter nicht duplizieren muss.

Nun moechte ich eine erweiterte Version meines Algorithmus implementieren. Es soll wieder eine Basis-Implementierung mit NumPy geben und eine erweiterte Implementierung fuer die GPU:


In Pseudocode:

Code: Alles auswählen

class NumpyBase:
    # Basisimplementierung mittels numpy
    # ....


class GpuBase(NumpyBase):
    # gleicher Algorithmus wie NumpyBase, aber auf der GPU
    # ...

class NumpyExtended(NumpyBase):
    # Erweiterte Version mittels Numpy
    # ...


class GpuExtended(GpuBase):
    # ist 100%ig ident mit NumpyExtended.
    # .....
Ich habe jetzt folgendes Problem: GpuExtended und NumpyExtended sind zu 100% identisch. Zeichen fuer Zeichen. Dadurch, dass sie verschiedene Eltern-Klassen haben, rechnet die eine aber auf der GPU und die andere auf der CPU. Zwei mal den gleichen Code zu warten ist natuerlich nicht sinnvoll.

Ich moechte das Ganze daher nach Moeglichkeit so loesen, dass ich nur mehr EINE Klasse "Extended" habe, und der irgendwie sagen kann "verwende GpuBase bzw. NumpyBase als deine Basisklasse".

Geht das Irgendwie?
[b]Ordnung ist das Chaos, an das man sich gewöhnt hat
[i]Der Weg ist das Ziel[/b][/i]
[url=http://bluetiger.bauchlandung.org/]bluetiger.bauchlandung.org[/url]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Implementier ExtendedMixin und lass es von object erben. NumpyExtended und GpuExtended sind dann einfach zwei Klassen die von ExtendedMixin und NumpyBase bzw. GpuBase erben. Mixins sind ein recht nützliches OOP Pattern welches man kennen sollte.

Du könntest dann noch eine Funktion definieren, die als Factory dient und dir die gewünschte Klasse oder schon eine Instanz zurückgibt, sollte es dann noch notwendig sein.
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

Klasse, genau sowas hatte ich gesucht. Vielen Dank! :)
[b]Ordnung ist das Chaos, an das man sich gewöhnt hat
[i]Der Weg ist das Ziel[/b][/i]
[url=http://bluetiger.bauchlandung.org/]bluetiger.bauchlandung.org[/url]
Antworten