Aha, also __dict__ sieht doch schon nicht schlecht aus!
Die ';' waren übrigens ein Tipfehler, weil ich hier grad immer mit ;-separierten .txt-files rummache...
Also was ich machen will: Ergebnisse etc. von Pferderennen verwalten. Mein erster Versuch ohne Klassen hat sich nach und nach in grauenhaften Spaghetticode verwandelt, mein neuer Versuch sieht bisher so aus:
Code: Alles auswählen
# -*- coding: cp1252 -*-
import os
import time
import re
class back_lay:
def __init__(self, back, lay):
self.back = back
self.lay = lay
class course:
Courses = { 'arl':['Arlington','AP'],
'belmont':['Belmont Park','BEL'],
'delaw':['Delaware Park','DEL'],
'fingl':['Finger Lakes','FL'],
'golden':['Golden Gate Fields','GG'],
'greatlk':['Great Lakes Downs','GLD'],
'hollyp':['Hollywood Park','HOL'],
'indiana':['Indiana Downs','IND']}
def __init__(self, inputstring):
self.realname = ''
self.BFname = ''
self.DRFname = ''
class odds:
def __init__(self):
self.timetorace = 0
self.rank = 0
self.odds = [back_lay(0,0), back_lay(0,0), back_lay(0,0)]
class runner:
def makestring(self):
s = ''
d = self.makedict().values()
for i in d:
s = s + str(i)
s = s + ';'
return s
def makedict(self):
d = {}
d['index'] = self.index
d['raceID'] = self.raceID
d['course'] = self.course
d['country'] = self.country
# etc. pp.
return d
def find(self, inputstring):
tmp = self.makedict()
i = inputstring.split('=')
if tmp.has_key(i[0]) and str(tmp[i[0]]) == i[1]:
return True
else:
return False
def __init__(self):
self.index = 0
self.raceID = ''
self.course = course('')
self.country = ''
self.time = ''
self.racenr = 0
self.distance = []
self.type = ''
self.runners = 0
self.nonrunners = 0
self.horsenr = 0
self.horsename = ''
self.horseID = 0
self.odds = odds()
self.result = 0
class races:
def __init__(self, DB_filename):
self.DB_filename = DB_filename
self.runner = []
DB_file = open(DB_filename)
for DB_line in DB_file:
linelist = DB_line.split(';')
horse = runner()
horse.raceID = linelist[0]
horse.course.BFname = linelist[1]
horse.country = linelist[2]
horse.time = linelist[3]
horse.racenr = linelist[5]
horse.horsename = linelist[16]
self.runner.append(horse)
DB_file.close()
# def Write_DB(self, DB_filename):
# DB_file = open(DB_filename, 'w')
# header = self.runner[0].makedict().keys()
# DB_file.write
# for i in runner:
#
# DB_file.write
def Filter_Races(self, filterstring):
result = []
for i in self.runner:
if i.find(filterstring):
result.append(i)
return result
def race_list(self):
result = []
for i in self.runner:
result.append(i.raceID)
result = set(result)
return result
######################################################### MAIN
Path = 'C:/'
DB_filename = 'DataBase.txt'
DB = races(Path + DB_filename)
# zum Beispiel:
a = DB.Filter_Races('country=us')
for i in a:
print i.raceID
Das DB-file ist halt wie gesagt ein ;-separiertes txt-file, sollte es auch bleiben weil ich es dann auch mit zB excel noch benutzen kann.
Habe also innerhalb der Klasse races eine Liste races.runner, und in dieser Liste die einzelnen Pferde. Was ich jetzt brauche ist eine Möglichkeit diese Liste zu filtern, weiss nicht ob das da oben jetzt ein brauchbarer Ansatz dafür wäre?
Was mich daran noch gestört hat war dass ich jetzt dachte ich müsste in jede (unter-) klasse noch die methoden make_dict und find schreiben, aber mit dem __dict_ hat sich ja jedenfalls das erste erledigt.
Hab ich denn da ansonsten irgendwie groben Unfug programmiert bisher oder irgendwas viel zu umständlich gemacht?
Danke!
Jo
PS bei der Gelegenheit kann ich mal sagen dass ich begeistert bin: Hab bisher im Netz selten so ein kompetentes und freundliches Forum gesehen!