| 

.NET C# Java Javascript Exception

2
Hallo zusammen,
gibt es eine Möglichkeit eine Klasse in Python als static zu definieren?

Hintergrund ist, es solle eine ausgiebige Prüfung von Kennwerten auf einer Anzahl an Datensätzen erfolgen. Dazu sollen Bausteinweise einzelne Klassen diese Prüfungen durchführen. Die Ergebnisse sollen dann in einer Globalen Klasse festgehalten werden.

Im zweiten Schritt sollen entsprechende Maßnahmen anhand der Prüfungen erfolgen. Auch diese Ergebnisse sollen global festgehalten werden.

Die Idee war eine Container-Klasse gewesen, die von allen einzelnen Klassen direkt befühlt bzw. ausgelesen werden kann.

Eine Lösung ist in den Klassen eine Variable als Global zu definieren. Das finde ich aber unschön.

Hat einer noch eine andere Idee?

Gruß Jens

Beispiel mit der globalen Variable:

class T1(object):
__T1 = False
def __init__(self):
pass
def setT1(self, val):
self.__T1 = val
def getT1(self):
return self.__T1
class T2(object):
def __init__(self):
global Test1
self.__T1 = Test1
self.__T1.setT1('TestVar 1')
class T3(object):
def __init__(self):
global Test1
self.__T1 = Test1
print self.__T1.getT1()
self.__T1.setT1('TestVar 1 zum Zweiten')

Test1 = T1()
print Test1.getT1()
T2()
T3()
27.07.2016
XJenso 297 7
2 Antworten
1
Da habe ich wohl Ihre Frage nur halb gelesen - Entschuldigung...

Dann habe ich einen anderen Vorschlag für Sie:

Implementieren Sie die Klasse als Singleton. Bei dieser Lösung wird nur genau eine Instanz erzeugt.
Hier ein kleines Beispiel:
class OnlyOne:
class __OnlyOne:
def __init__(self, arg):
self.val = arg
def __str__(self):
return repr(self) + self.val
instance = None
def __init__(self, arg):
if not OnlyOne.instance:
OnlyOne.instance = OnlyOne.__OnlyOne(arg)
else:
OnlyOne.instance.val = arg
def __getattr__(self, name):
return getattr(self.instance, name)

x = OnlyOne('sausage')
print(x)
y = OnlyOne('eggs')
print(y)
z = OnlyOne('spam')
print(z)
print(x)
print(y)
print(`x`)
print(`y`)
print(`z`)

Da immer eine Instanz (und zwar die selbe) zurückgegeben wird, sollte fast einer "static class" rntsprechen.
29.07.2016
edvservice 1,2k 6
Danke sehr, dass sollte mein Problem wohl lösen.
XJenso 29.07.2016
0
Ich bin zwar kein ausgesprochener Python-Experte (ich verfolge die Sprache nur so nebenbei), aber ich glaube mich zu erinnern, dass es den Dekorator
@staticmethod
oder
@classmethod
gibt, der vor die Methodendefinition gesetzt werden muss. Dann lässt sich die Methode mit der Klasse aufrufen.

Hier noch ein Link, den ich auf die Schnelle gefunden haben:
Statische bzw. abstrakte Methoden

Vielleicht hilft dies ein wenig weiter...
27.07.2016
edvservice 1,2k 6
Das war nicht das was ich wollte. Ich wollte nicht eine statische Methode sondern die ganze Klasse soll statisch sein. Also egal wo ich mich zur Laufzeit befinde, ich arbeite immer auf dem selben Objekt welches dann verschieden Werte global zur Verfügung stellt.
XJenso 27.07.2016

Stelle deine --Frage jetzt!