[Erledigt] Feststellen des (Eltern)Klassennames

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.
BlackJack

Die Ausnahme scheint ja aus dem pydev Debugger zu kommen. Keine Ahnung was das ist, aber ich würde mal auf einen Fehler im Debugger tippen.

Die Zeile ist ein Generator-Ausdruck. Die sind relativ neu und im Grunde das gleiche wie "list comrehension" nur eben "lazy". Ganz allgemein gehalten:

Code: Alles auswählen

# Erzeugt eine Liste.
result = [func(x) for x in if pred(x)]

# Erzeugt einen Generator/Iterator
result = (func(x) for x in if pred(x))
Der Generatorausdruck hat halt den Vorteil, dass die Elemente erst ausgewertet werden wenn sie angefordert werden und nicht wie bei der "list comprehension" sofort. Das bedeutet im Quelltext oben, dass der ``in``-Test abbricht sobald das erste mal `True` herausgekommen ist.

Diese "ein Austrittspunkt"-Regel macht zwar Sinn, aber es gibt auch Ausnahmen. Bei kurzen Funktionen wo man am Ende ein ``return KONSTANTE`` sieht, ist irgendwie klar, dass innerhalb der Funktion noch andere ``return``\s stecken werden. Und in diesem Fall denke ich ist die Ausnahme, dass Quelltext nicht sicherer wird, wenn einen diese Regel dazu zwingt umständlich einen Rückgabewert über Schleifendurchläufe zu "retten". Mich hatte das ``return = False`` mittendrin zum Beispiel erst einmal verwirrt.

`inspect.getmro()` habe ich verwendet um ein wenig direkten Zugriff auf __magische__ Attribute zu vermeiden. Ich weiss jetzt aus dem Kopf nicht wie sicher __mro__ vorhanden sein muss, oder ob es ein Implementierungsdetail ist, aber ich würde erwarten, dass `inspect.getmro()` auch in Pythonimplementierungen funktioniert, die dieses Attribut nicht an Objekten anbieten.
ChrisGTJ
User
Beiträge: 105
Registriert: Mittwoch 22. August 2007, 15:45

@BlackVivi: Natürlich nicht... ;)

@BlackJack:

Danke, das sind einleuchtene Erklärungen.

Deinen Ausführungen zum Austrittspunkt stimme ich voll und ganz zu. Regeln sind wichtig und notwendig, aber starr dürfen sie nicht sein. Nach dem Motto: Gebogen dürfen die Wege sein, nur krumm nicht. In C/C++ nutze ich manchmal sogar goto...

Gruß,

Christoph
Antworten