Klassen, Metaklassen, Zugriffe

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.
Antworten
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

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.
Zuletzt geändert von Anonymous am Donnerstag 21. Januar 2016, 17:54, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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`?
the more they change the more they stay the same
gerald123
User
Beiträge: 36
Registriert: Donnerstag 10. September 2015, 12:10

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Antworten