Bertel Lund Hansen
2008-10-28 15:31:47 UTC
Hej alle
Til mit statistikprogram benytter jeg nogle klasser. En
basisklasse hedder Counter og en afledt dertil hedder
Percentagecounter.
class Counter:
def __init__ (self,nam,msgs=0,usrs=0):
self.name=nam
self.messages=msgs
self.users=usrs
def gns ():
return self.messages/self.users
class PercentageCounter (Counter):
def msg_pct ():
return self.messages/total.messages*100
def pers_pct ():
return self.users/total.users*100
Under databehandlingen opsamles data for hvert indlæg og gemmes i
forskellige arrays af tællerklasser. Der er f.eks. ét der
opsamler newsreadere. Jeg kan godt lave det med simple arrays
(lister i Python), men jeg ville gerne have en inkludér-metode
knyttet sammen med disse arrays. Den skal enten appende et nyt
element eller også finde et gammelt og opdatere dets datatællere.
Derfor laver jeg klassen StatArray (her delvis pseudokodet):
class StatArray ():
unit_array=[]
def is_member (name):
return index hvor -1 = falsk
def include (name):
n=self.is_member(name)
if n>=0: opdater tællere
else: self.unit_array.append(Counter(nam,1,1))
Problemet er nu at nogle arrays skal indeholde elementer af typen
Counter mens andre skal indeholde elementer af typen
PercentageCounter.
Det kan løses ved at jeg kun laver klassen PercentageCounter, men
det vil betyde at dem som egentlig kan nøjes med Counter, vil
slæbe rundt på to overflødige metoder.
Det kan naturligvis også løses ved at jeg laver to forskellige
wrapperklasser til mine arrays. Det er også muligt at medsende et
flag i parameterlisten, men det er jo ikke særlig kønt.
Findes der en elegant løsning?
Til mit statistikprogram benytter jeg nogle klasser. En
basisklasse hedder Counter og en afledt dertil hedder
Percentagecounter.
class Counter:
def __init__ (self,nam,msgs=0,usrs=0):
self.name=nam
self.messages=msgs
self.users=usrs
def gns ():
return self.messages/self.users
class PercentageCounter (Counter):
def msg_pct ():
return self.messages/total.messages*100
def pers_pct ():
return self.users/total.users*100
Under databehandlingen opsamles data for hvert indlæg og gemmes i
forskellige arrays af tællerklasser. Der er f.eks. ét der
opsamler newsreadere. Jeg kan godt lave det med simple arrays
(lister i Python), men jeg ville gerne have en inkludér-metode
knyttet sammen med disse arrays. Den skal enten appende et nyt
element eller også finde et gammelt og opdatere dets datatællere.
Derfor laver jeg klassen StatArray (her delvis pseudokodet):
class StatArray ():
unit_array=[]
def is_member (name):
return index hvor -1 = falsk
def include (name):
n=self.is_member(name)
if n>=0: opdater tællere
else: self.unit_array.append(Counter(nam,1,1))
Problemet er nu at nogle arrays skal indeholde elementer af typen
Counter mens andre skal indeholde elementer af typen
PercentageCounter.
Det kan løses ved at jeg kun laver klassen PercentageCounter, men
det vil betyde at dem som egentlig kan nøjes med Counter, vil
slæbe rundt på to overflødige metoder.
Det kan naturligvis også løses ved at jeg laver to forskellige
wrapperklasser til mine arrays. Det er også muligt at medsende et
flag i parameterlisten, men det er jo ikke særlig kønt.
Findes der en elegant løsning?
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/