statische Klasse in python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

statische Klasse in python

Beitragvon Twilo » Freitag 11. Mai 2007, 18:05

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
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Beitragvon pyStyler » Freitag 11. Mai 2007, 18:42

Hallo,
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)


Gruss
pyStyler
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Beitragvon Twilo » Freitag 11. Mai 2007, 19:02

Hallo,

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)

in C# soll es statische Klassen geben.

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


wie kann man eigentlich in python Eigenschaften festlegen?

mfg
Twilo
BlackJack

Beitragvon BlackJack » Freitag 11. Mai 2007, 19:11

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.
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Beitragvon Twilo » Freitag 11. Mai 2007, 19:22

Hallo,

BlackJack hat geschrieben:Du wirfst hier einiges wild durcheinander. Python ist nicht C#.

das ist mir klar :wink:

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
BlackJack

Beitragvon BlackJack » Freitag 11. Mai 2007, 19:36

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.
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Beitragvon Twilo » Freitag 11. Mai 2007, 19:41

Hallo,

ich meine, ich soll z.B. folgendes nicht tun

Code: Alles auswählen

#!/usr/bin/python

variable1 = ''
variable2 = ''

class name:
  ...


mfg
Twilo
BlackJack

Beitragvon BlackJack » Freitag 11. Mai 2007, 20:05

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.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Freitag 11. Mai 2007, 20:07

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
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

C# static classes

Beitragvon sunmountain » Freitag 11. Mai 2007, 21:37

Hallo,

static classes in C# (http://msdn2.microsoft.com/en-us/library/79b3xss3(VS.80).aspx)
    Können nur statische Member haben
    Können nicht instanziert werden
    Können keine Oberklasse sein
    Können keinen Konstruktor haben


Der Sinn des Ganzen ?
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


trifft es schon ganz gut.
Der Rest ist pure Disziplin.
Zuletzt geändert von sunmountain am Freitag 11. Mai 2007, 21:40, insgesamt 1-mal geändert.
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Beitragvon sunmountain » Freitag 11. Mai 2007, 21:39

blackbird hat geschrieben:Globale Variablen in Python sind absolut OK

Aber genauso überflüssig wie

Code: Alles auswählen

goto DONTTRYTHISATHOME;

jedenfalls in fast allen Fällen
Twilo
User
Beiträge: 109
Registriert: Mittwoch 10. Januar 2007, 19:17
Wohnort: Berlin
Kontaktdaten:

Re: C# static classes

Beitragvon Twilo » Freitag 11. Mai 2007, 21:41

Hallo,

sunmountain 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

so hatte ich es auch in Erinnerung

Somit kann die Aussage des Dozenten nicht korrekt sein :o

mfg
Twilo
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Re: C# static classes

Beitragvon sunmountain » Freitag 11. Mai 2007, 21:43

Twilo hat geschrieben:Somit kann die Aussage des Dozenten nicht korrekt sein :o

Ein sehr bekanntes Problem, nicht nur in der Literatur
fr3sh
User
Beiträge: 3
Registriert: Mittwoch 20. Dezember 2006, 17:09
Wohnort: in da south of germany

Re: statische Klasse in python

Beitragvon fr3sh » Dienstag 6. Dezember 2011, 10:44

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/5313364/execute-function-without-sending-self-to-it

Beispiel:

Code: Alles auswählen

class Foo(object):
    @staticmethod
    def bar():
        print "Static method called!"

Aufruf wie folgt:

Code: Alles auswählen

Foo.bar()
>> Static method called!


ciao
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Re:

Beitragvon frabron » Dienstag 6. Dezember 2011, 10:52

Bisschen spät ;)
Die Antwort hier ist immerhin die zweite im Thread, nur ohne den Decorator ...
pyStyler hat geschrieben:Hallo,
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)


Gruss
pyStyler

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]