Verfasst: Freitag 28. September 2007, 12:35
Das ist recht umständlich. Informationen aus einer Zeichenkettendarstellung zu parsen anstatt auf diese direkt zuzugreifen ist zum Beispiel fehleranfällig. `__mro__` enthält Klassen- oder Typ-Objekte, die haben ein `__name__`-Attribut, und das freundlicherweise sogar ohne den "Pfad" durch die Module und Packages.
`ret` und einiges an Prüfcode könnte man einsparen wenn man am Ende ein ``return True`` schreibt und die Funktion verlässt mit ``return False`` verlässt, wenn eine der Bedingungen nicht erfüllt ist.
Und ich verstehe immer noch nicht warum der Klassenname wichtiger ist als die Funktionalität, die die Klasse bietet.
Das ganze etwas kompakter:
`ret` und einiges an Prüfcode könnte man einsparen wenn man am Ende ein ``return True`` schreibt und die Funktion verlässt mit ``return False`` verlässt, wenn eine der Bedingungen nicht erfüllt ist.
Und ich verstehe immer noch nicht warum der Klassenname wichtiger ist als die Funktionalität, die die Klasse bietet.
Das ganze etwas kompakter:
Code: Alles auswählen
from inspect import getmro
from itertools import imap
def check(motor, needs):
def check_need((class_, motor_name)):
class_names = (c.__name__ for c in getmro(motor.__class__))
return class_.__name__ in class_names and motor.name == motor_name
return any(imap(check_need, needs))