statische Klasse in python
Hallo,
ich brauche in allen Klassen 2 Werte. Die beiden Werte stehen leider nur in unterschiedlichen Klassen zur Verfügung.
Mein Gedanke war, per Singleton bzw. Borg-Muster die 2 Werte in einer Klasse zu setzen.
Mein Dozent meint, das könnte man auch mit einer statischen Klasse realisieren. Man solle in einer statischen Klasse die Eigenschaften ändern können.
Stimmt das? Ich kann es mir nicht ganz vorstellen :K
meine Frage:
wie erstellt man unter python eine statische Klasse?
in meinen python Büchern "Objektorientierte Programmierung mit Python" und "Python Ge-Packt" kann ich zu statischen Klassen nichts finden.
mfg
Twilo
ich brauche in allen Klassen 2 Werte. Die beiden Werte stehen leider nur in unterschiedlichen Klassen zur Verfügung.
Mein Gedanke war, per Singleton bzw. Borg-Muster die 2 Werte in einer Klasse zu setzen.
Mein Dozent meint, das könnte man auch mit einer statischen Klasse realisieren. Man solle in einer statischen Klasse die Eigenschaften ändern können.
Stimmt das? Ich kann es mir nicht ganz vorstellen :K
meine Frage:
wie erstellt man unter python eine statische Klasse?
in meinen python Büchern "Objektorientierte Programmierung mit Python" und "Python Ge-Packt" kann ich zu statischen Klassen nichts finden.
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Hallo,
eventuell meinst Du Statische Methoden?
Gruss
pyStyler
eventuell meinst Du Statische Methoden?
Code: Alles auswählen
class StaticMethod:
def _string(s):
return str(s)
def _float(f):
return float(f)
_string = staticmethod(_string)
_float = staticmethod(_float)
print StaticMethod._string('String')
print StaticMethod._float(2)
pyStyler
Hallo,
Wenn ich den Dozenten richtig verstanden habe, meint er in etwa soetwas
wie kann man eigentlich in python Eigenschaften festlegen?
mfg
Twilo
in C# soll es statische Klassen geben.pyStyler hat geschrieben:eventuell meinst Du Statische Methoden?Code: Alles auswählen
class StaticMethod: def _string(s): return str(s) def _float(f): return float(f) _string = staticmethod(_string) _float = staticmethod(_float) print StaticMethod._string('String') print StaticMethod._float(2)
Wenn ich den Dozenten richtig verstanden habe, meint er in etwa soetwas
Code: Alles auswählen
class test:
eigenschaft = 1
def test(test1):
...
print test.eigenschaft
test.eigenschaft = 2
print test.eigenschaft
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Du wirfst hier einiges wild durcheinander. Python ist nicht C#. In Python gibt es keine statischen Klassen, bei uns ist alles dynamisch. Wobei das `static` in C#, Java, C++, C in verschiedenen Kontexten auch noch eine unterschiedliche Bedeutung hat.
Welches Problem willst Du denn lösen? Wenn Du mit "Eigenschaften" Properties meinst, dann schau mal in der Doku nach der `property()`-Funktion.
Welches Problem willst Du denn lösen? Wenn Du mit "Eigenschaften" Properties meinst, dann schau mal in der Doku nach der `property()`-Funktion.
Hallo,

ich muss für ein Tool, welches mit die Daten nicht so liefert, wie ich sie brauche, ein PlugIn schreiben.
Dieses Tool benutzt meine Klassen. Ich brauche 2 Werte, die an unterschiedlichen Klassen übergeben werden. Das Tool ruft 2 Klassen nacheinander auf, wo jeweils ein Wert davon übergeben wird. Danach werden die ganzen anderen Klassen aufgerufen, wo die 2 Werte benötigt werden.
Ich könnte die Daten jetzt in einer globalen Variable speichern. Das ist jedoch nicht gewünscht. Deshalb speichere ich die Daten in einer Klasse (Borg Entwufsmuster). Damit ich von jeder Klasse auf die Werte zugreifen kann.
der Dozent meinte, dass lässt sich doch mit einer statischen Klasse realisieren.
Ich weiss jedoch nicht, wie das funktionieren soll, bzw. ob das in python so überhaupt realisierbar ist.
Der Dozent programmiert nur mit VB.net und C#.
mfg
Twilo
das ist mir klarBlackJack hat geschrieben:Du wirfst hier einiges wild durcheinander. Python ist nicht C#.

ich muss für ein Tool, welches mit die Daten nicht so liefert, wie ich sie brauche, ein PlugIn schreiben.
Dieses Tool benutzt meine Klassen. Ich brauche 2 Werte, die an unterschiedlichen Klassen übergeben werden. Das Tool ruft 2 Klassen nacheinander auf, wo jeweils ein Wert davon übergeben wird. Danach werden die ganzen anderen Klassen aufgerufen, wo die 2 Werte benötigt werden.
Ich könnte die Daten jetzt in einer globalen Variable speichern. Das ist jedoch nicht gewünscht. Deshalb speichere ich die Daten in einer Klasse (Borg Entwufsmuster). Damit ich von jeder Klasse auf die Werte zugreifen kann.
der Dozent meinte, dass lässt sich doch mit einer statischen Klasse realisieren.
Ich weiss jedoch nicht, wie das funktionieren soll, bzw. ob das in python so überhaupt realisierbar ist.
Der Dozent programmiert nur mit VB.net und C#.
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Globale Variablen unerwünscht und Singleton/Borg-Klasse als Lösung ist ein Widerspruch. Singletons und Werte darin sind auch global. Module sind im Grunde Singletons, darum ist das auch die einfachste Lösung.
Hallo,
ich meine, ich soll z.B. folgendes nicht tun
mfg
Twilo
ich meine, ich soll z.B. folgendes nicht tun
Code: Alles auswählen
#!/usr/bin/python
variable1 = ''
variable2 = ''
class name:
...
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Warum nicht? Ich meine es ist zwar eine "Regel" das globale Variablen nicht so gut sind, aber wenn man sie braucht, braucht man sie halt. Eine Klasse zu schreiben, die nur als Namensraum dient ist IMHO Missbrauch, weil Module dafür gedacht sind.
In C# *muss* man alles in eine Klasse packen. In Python braucht man das nicht unnötig verkomplizieren.
In C# *muss* man alles in eine Klasse packen. In Python braucht man das nicht unnötig verkomplizieren.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Globale Variablen in Python sind absolut OK, wenn man sie diese für globales Zeug verwendet. Immerhin sind globale nicht global sondern nur Modulmember. Richtige Globals wie in Ruby/PHP etc gibt es nur via __builtin__ patchen und das ist böse.
TUFKAB – the user formerly known as blackbird
- sunmountain
- User
- Beiträge: 89
- Registriert: Montag 13. März 2006, 17:18
Hallo,
static classes in C# (http://msdn2.microsoft.com/en-us/librar ... S.80).aspx)
sowas wie ein struct, bei dem ein malloc() oder new() nicht geht.
Es gibt keine Entsprechung dazu in Python (keine simple).
trifft es schon ganz gut.
Der Rest ist pure Disziplin.
static classes in C# (http://msdn2.microsoft.com/en-us/librar ... S.80).aspx)
- Können nur statische Member haben
- Können nicht instanziert werden
- Können keine Oberklasse sein
- Können keinen Konstruktor haben
sowas wie ein struct, bei dem ein malloc() oder new() nicht geht.
Es gibt keine Entsprechung dazu in Python (keine simple).
Code: Alles auswählen
class StaticClass:
a = 100
b = 200
Der Rest ist pure Disziplin.
Zuletzt geändert von sunmountain am Freitag 11. Mai 2007, 21:40, insgesamt 1-mal geändert.
- sunmountain
- User
- Beiträge: 89
- Registriert: Montag 13. März 2006, 17:18
Aber genauso überflüssig wieblackbird hat geschrieben:Globale Variablen in Python sind absolut OK
Code: Alles auswählen
goto DONTTRYTHISATHOME;
Hallo,
Somit kann die Aussage des Dozenten nicht korrekt sein
mfg
Twilo
so hatte ich es auch in Erinnerungsunmountain hat geschrieben: static classes in C#
- Können nur statische Member haben
- Können nicht instanziert werden
- Können keine Oberklasse sein
- Können keinen Konstruktor haben
Somit kann die Aussage des Dozenten nicht korrekt sein

mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
- sunmountain
- User
- Beiträge: 89
- Registriert: Montag 13. März 2006, 17:18
Ein sehr bekanntes Problem, nicht nur in der LiteraturTwilo hat geschrieben: Somit kann die Aussage des Dozenten nicht korrekt sein![]()
-
- User
- Beiträge: 3
- Registriert: Mittwoch 20. Dezember 2006, 17:09
- Wohnort: in da south of germany
Ich glaube ich habe mit der Hilfe eines Kollegen eben die gesuchte Lösung gefunden, eine Statische Klasse zu erzeugen. Ich komme aus der C# Ecke und mir sagt die Methode mit dem Modulen nicht wirklich zu.
Gefunden hier: http://stackoverflow.com/questions/5313 ... self-to-it
Beispiel:
Aufruf wie folgt:
ciao
Gefunden hier: http://stackoverflow.com/questions/5313 ... self-to-it
Beispiel:
Code: Alles auswählen
class Foo(object):
@staticmethod
def bar():
print "Static method called!"
Code: Alles auswählen
Foo.bar()
>> Static method called!
Bisschen spät 
Die Antwort hier ist immerhin die zweite im Thread, nur ohne den Decorator ...

Die Antwort hier ist immerhin die zweite im Thread, nur ohne den Decorator ...
pyStyler hat geschrieben:Hallo,
eventuell meinst Du Statische Methoden?GrussCode: Alles auswählen
class StaticMethod: def _string(s): return str(s) def _float(f): return float(f) _string = staticmethod(_string) _float = staticmethod(_float) print StaticMethod._string('String') print StaticMethod._float(2)
pyStyler
Was ist dadran eine statische Methode? :-/fr3sh hat geschrieben:Ich glaube ich habe mit der Hilfe eines Kollegen eben die gesuchte Lösung gefunden, eine Statische Klasse zu erzeugen. Ich komme aus der C# Ecke und mir sagt die Methode mit dem Modulen nicht wirklich zu.
Gefunden hier: http://stackoverflow.com/questions/5313 ... self-to-it
Beispiel:Aufruf wie folgt:Code: Alles auswählen
class Foo(object): @staticmethod def bar(): print "Static method called!"
ciaoCode: Alles auswählen
Foo.bar() >> Static method called!
Ich hatte jetzt eher eine Erklärung zu statischen Funktion erwartet
Aber ich glaube ich lese einfach mal die Doku zu @staticmethod
Ich denke bei statisch an etwas unabänderbares ich denke aber ich habe was falschen im Kopf
Ich bin halt nicht mit statischen Dingen in Programmiersprachen vertraut.
Edit 1 Mein Sprachstil in dem Post ist ja auch schlecht
Ich Ich Ich Ich
Edit 2 Wenn ich meine Versuche jetzt richtig interpretiert habe, ist meine Vermutung der nicht änderbaren Funktion ja doch korrekt. Wäre über eine kleine Aufklärung sehr Glücklich.

Ich denke bei statisch an etwas unabänderbares ich denke aber ich habe was falschen im Kopf

Ich bin halt nicht mit statischen Dingen in Programmiersprachen vertraut.
Edit 1 Mein Sprachstil in dem Post ist ja auch schlecht

Edit 2 Wenn ich meine Versuche jetzt richtig interpretiert habe, ist meine Vermutung der nicht änderbaren Funktion ja doch korrekt. Wäre über eine kleine Aufklärung sehr Glücklich.

Statisch bedeutet in diesem Kontext, dass du keine Instanz vom Typ "foo" benötigst. Normalerweise würdest du die Methode so aufrufen:
Mittels "staticmethod" vereinfacht sich das ganze:
An der Signatur von bar kannst du auch erkennen, dass du nun kein Zugriff mehr auf die Instanz hast.
Code: Alles auswählen
foo = Foo()
foo.bar()
#mit
class Foo(object):
def bar(self):
pass
Code: Alles auswählen
Foo.bar()
#mit
class Foo(object):
def bar():
pass
Das Leben ist wie ein Tennisball.