Seite 1 von 1

Base-Klasse parametrisieren?

Verfasst: Samstag 24. Dezember 2011, 22:38
von Blue-Tiger
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?

Re: Base-Klasse parametrisieren?

Verfasst: Samstag 24. Dezember 2011, 23:01
von DasIch
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.

Re: Base-Klasse parametrisieren?

Verfasst: Sonntag 25. Dezember 2011, 00:27
von Blue-Tiger
Klasse, genau sowas hatte ich gesucht. Vielen Dank! :)