Seite 1 von 1

Klassen, Metaklassen, Zugriffe

Verfasst: Donnerstag 21. Januar 2016, 17:45
von gerald123
Hey, ich versuche aktuell einen bestehenden Python-Code zu adaptieren; dabei sind mir einige Fragmente nicht ganz klar. Hier die Strukturierung des Codes:

In einer Metaklasse wird folgendes definiert:

Code: Alles auswählen

class Metaklasse(object):
	__metaclass__ = abc.ABCMeta

	def __init__(self):
   	     self.S3= []
        
	 @abc.abstractmethod
 	 def _trans(self, a,b,c):
        return
    def calc(self)
       self.S3= [] ### Stelle 3
       self._trans(a,b,c)
       f.write(S3) ###Stelle 1
	..
	..
Eine weitere Klasse wird von der Metaklase instanziiert:

Code: Alles auswählen

class Klasse1(Metaklasse):
	def _trans(self, a,b,c):
		..
		S1 = "Summe1"
		S2 = "Summe"
		S3 = [S1, S2, "test", 56]
		return S1, S2 ###Stelle2
Meine Frage: Warum habe ich an #Stelle 1 Zugriff auf S3, obwohl S3 an #Stelle2 nicht zurückgegeben wird? S3 wird (__init__) definiert, sobald eine Klasse instanziiert wird; dann wird S3 noch einmal an # Stelle 3 gesetzt.

Re: Klassen, Metaklassen, Zugriffe

Verfasst: Donnerstag 21. Januar 2016, 18:00
von BlackJack
@gerald123: An Stelle 1 gibt es einen `NameError`. Und das `Klasse1._trans()` Rückgabewerte hat sieht falsch aus weil die in dem gezeigten Aufruf der Methode gar nicht verwendet werden. Ich sehe auch nicht warum das eine Metaklasse sein soll, beziehungsweise *ist das keine Metaklasse*, sollte also auch nicht so heissen. Das ist eine abstrakte Basisklasse aber keine Metaklasse.

Re: Klassen, Metaklassen, Zugriffe

Verfasst: Donnerstag 21. Januar 2016, 18:00
von Dav1d
Der Code funktioniert sicher nicht. Zeile 12, `a`, `b` und `c` sind nicht definiert -> Fehler. Zeile 13, `S3` ist nicht definiert, meinst du `self.S3`?

Re: Klassen, Metaklassen, Zugriffe

Verfasst: Donnerstag 21. Januar 2016, 19:18
von gerald123
Vielen Dank für eure Antworten. Der gesamte Code ist über 5000 Zeilen lang; ich habe hier nur Auszüge (Vereinfachungen gepostet). Meine Frage: warum habe ich außerhalb der Funktion "calc" auf S3 Zugriff

Re: Klassen, Metaklassen, Zugriffe

Verfasst: Donnerstag 21. Januar 2016, 19:30
von Sirius3
@gerald123: wenn Du nicht irgendwo unverständliche Sachen mit globalen Variablen machst (was Deine Frage auch erklären würde), dann ist a,b,c und S3 nicht definiert, das Programm also nicht lauffähig.