Gut, hier mal das bessere Beispiel, wenn es für das eigentliche Problem eine bessere Lösung gibt ist es natürlich umso besser.
Für den Programmierwettbewerb des freienMagazins schreibe ich gerade einen Bot, welcher unter anderem auch eine AI Klasse hat. Diese enthält unter anderem folgenden Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | class BaseAI:
def __init__(self, offer=raise_not_implemented,
accept=raise_not_implemented):
self.runden = 1
self.runde = 1
self.punkte = 0
self.punkte_gesamt = 0
self.accepted = True
self.data_table = dict()
if offer:
self.offer = offer
if accept:
self.accept = accept
|
offer und accept sind die Methoden, welche dazu dienen, ein Angebot abzugeben bzw. zu überprüfen. Über sie wird also das eigentliche Verhalten des Bots gesteuert. raise_not_implemented ist eine Funktion, die macht, was ihr Name sagt.
Um das Verhalten der Bots zu testen erstelle ich mehrere Bots mit unterschiedlichen Strategien und lasse sie gegeneinander antreten. Bisher hatte ich für jede Strategie eine eigene Klasse erstellt, welche von BaseAI erbt. Dies hat mit OOP meiner Meinung nach aber nicht mehr wirklich viel zu tun, da von jeder dieser Unterklassen immer nur ein einziges Objekt erstellt wird. Deswegen wollte ich jetzt eigentlich eine Klasse, von welcher mehrere Objekte mit variablen Strategien erzeugt werden können. Für bessere Vorschläge bin ich natürlich offen.
Riddle schrieb:
Soll myfoo zur Klasse gehören oder global sein?
myfoo soll global sein.
Bei ersterem passt die Einrückung nicht, bei zweitem macht self als Bezeichner keinen Sinn.
Naja, ich hätte es auch Schnitzel oder Blumentopf nennen können, das ist bei solch aussagekräftigen Beispielen dann eh egal. Mit self wollte ich andeuten, dass myfoo später ein Objekt als Eingabe erwartet. self ist in Python nun mal nur eine Konvention und kein Keyword.