Seite 1 von 1
Static (Klassen),Methoden, Variablen ?
Verfasst: Dienstag 5. November 2002, 10:38
von leobm
Wie definiere ich static Klassen, Methoden oder Variablen in Python ?
Re: Static (Klassen),Methoden, Variablen ?
Verfasst: Dienstag 5. November 2002, 12:12
von Voges
Hallo!
Code: Alles auswählen
class Foo(object):
statdata = "bar1"
def statmethod(arg):
print arg
statmethod = staticmethod(statmethod)
print Foo.statdata
Foo.statmethod("bar2")
staticmethod() gibt es erst seit Version 2.2 und ist ein Feature der Klassen neuen Stils, also der Klassen, die von object abgeleitet sein müssen. Such mal bei Google in comp.lang.python nach "static methods" oder "static functions". Da erfährst Du dann auch wie es vorher ging. Wirklich ein viel diskutiertes Thema.
Zu statischen Klassen fällt mir nichts ein. Braucht man sowas?
Jan
Verfasst: Dienstag 5. November 2002, 12:18
von hans
Wer kann denn mal einen alten Knaben aufklären? Was kann ich denn mit einer statischen Methode machen was ich mit einer normalem nicht hinbekomme?
Hans
Verfasst: Dienstag 5. November 2002, 13:53
von Voges
Hallo!
hans hat geschrieben:Was kann ich denn mit einer statischen Methode machen was ich mit einer normalem nicht hinbekomme?
Nichts, außer das Du kein Objekt erzeugen musst, um sie aufrufen zu können.
Mal ein simples Beispiel: Eine Klasse, die einen Monat repräsentiert.
Code: Alles auswählen
class Monat(object):
_monatsnamen = ("Jan","Feb","Maerz","April","usw.")
def __init__(self,nummer): # 1 bis 12
self.nummer = nummer
def getName(self):
return Monat._monatsnamen[self.nummer-1]
def getAnzTage(self):
pass # sinnvoll ergaenzen
def getMonatsnamen():
return Monat._monatsnamen
getMonatsnamen = staticmethod(getMonatsnamen)
m = Monat(2)
print m.getName()
print Monat.getMonatsnamen()
Bei der Erzeugung eines Objektes gibst Du die Monatszahl an und das Object liefert Dir danach alle möglichen Angaben zu diesem einen Monat. Soweit nichts neues.
Aber vielleicht interessieren Dich nur die Namen aller Monate. Diese Information kann die Klasse Monat liefern, auch ohne dass sie einen bestimmten Monat repräsentiert. Es muss also nicht extra ein Monatsobjekt erzeugt werden.
Es gibt noch weitere Anwendungsbereiche, z.B. bei Patterns (z.B. Factories), aber das ist ein Thema für sich.
Jan
Verfasst: Dienstag 5. November 2002, 14:35
von leobm
@Voges: danke..
Verfasst: Samstag 16. Oktober 2004, 21:45
von pSy
Hallo... ich hoffe ich hab jetzt richtig aufgepasst und es nicht nur einfach übersehen, aber:
Wie mache ich statische Variablen? Also so, wie ich sie in C/C++ gewöhnt bin, dass ich sie einmal setze, sie in der gleichen Funktion zB inkrementiere und sie das nächste mal beim Funktionsaufruf immer noch inkrementiert sind.
Verfasst: Samstag 16. Oktober 2004, 23:10
von Dookie
Hi pSy,
direkt statische Varibablen gibts bei Python nicht. Du kannst aber als optionalen Parameter eine Liste oder ein Dictionary angeben und dessen Inhalt verhält sich wie statische Variablen.
Code: Alles auswählen
def plusnr(string, nummer=[0]):
nummer[0] += 1
return string+str(nummer[0])
for i in xrange(10):
print plusnr("Hallo")
Das selbe lässt sich aber auch meist mit Generatoren erreichen:
Code: Alles auswählen
def plusnr(string): # generator
nummer = 0
while True:
nummer += 1
yield string+str(nummer)
gen_plusnr = plusnr("Hallo")
for i in xrange(10):
print gen_plusnr.next()
Gruß
Dookie
Verfasst: Samstag 16. Oktober 2004, 23:19
von pSy
danke für die schnelle antwort...

genau das habe ich gesucht.