Static (Klassen),Methoden, Variablen ?
Hallo!
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
Code: Alles auswählen
class Foo(object):
statdata = "bar1"
def statmethod(arg):
print arg
statmethod = staticmethod(statmethod)
print Foo.statdata
Foo.statmethod("bar2")
Zu statischen Klassen fällt mir nichts ein. Braucht man sowas?
Jan
Hallo!
Mal ein simples Beispiel: Eine Klasse, die einen Monat repräsentiert.
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
Nichts, außer das Du kein Objekt erzeugen musst, um sie aufrufen zu können.hans hat geschrieben:Was kann ich denn mit einer statischen Methode machen was ich mit einer normalem nicht hinbekomme?
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()
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
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.
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.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
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.
Das selbe lässt sich aber auch meist mit Generatoren erreichen:
Gruß
Dookie
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")
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
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
danke für die schnelle antwort... 
genau das habe ich gesucht.

genau das habe ich gesucht.