Wie erhalten Sie alle Klassen in einem Modul definiert, aber nicht importiert?
Hab ich schon gesehen, die folgende Frage aber es hat nicht ganz bekommen, wo ich will: Wie kann ich eine Liste von allen Klassen innerhalb des aktuellen Moduls in Python?
Insbesondere möchte ich nicht, Klassen importiert werden, z.B. wenn ich das folgende Modul:
from my.namespace import MyBaseClass
from somewhere.else import SomeOtherClass
class NewClass(MyBaseClass):
pass
class AnotherClass(MyBaseClass):
pass
class YetAnotherClass(MyBaseClass):
pass
Wenn ich clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)
wie die akzeptierte Antwort in der verlinkten Frage schon sagt, würde es wieder MyBaseClass
und SomeOtherClass
zusätzlich zu den 3 definiert in diesem Modul.
Wie kann ich nur NewClass
AnotherClass
und YetAnotherClass
?
InformationsquelleAutor der Frage Davy8 | 2011-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Untersuchen Sie die
__module__
Attribut der Klasse, um herauszufinden, welches Modul es definiert wurde.InformationsquelleAutor der Antwort Ignacio Vazquez-Abrams
Entschuldige ich mich für die Beantwortung so eine alte Frage, aber ich hatte nicht das Gefühl, bequem mit dem inspect-Modul für diese Lösung. Ich habe irgendwo gelesen, dass ist nicht sicher zu verwenden in der Produktion.
Initialisieren Sie alle Klassen in einem Modul in namenlose Objekte in einer Liste
Sehen Antonis Christofides Kommentar zu Antwort 1.
Bekam ich die Antwort: für die Prüfung, ob ein Objekt einer Klasse aus
Wie um zu überprüfen, ob eine variable, eine Klasse oder nicht?
Dies ist also meine inspect-freie Lösung
InformationsquelleAutor der Antwort piRSquared
Möglicherweise möchten Sie auch zu prüfen, mit der "Python class browser" - Modul in die standard-Bibliothek:
http://docs.python.org/library/pyclbr.html
Da es nicht wirklich ausführen des Moduls in Frage (es ist naiv Abnahmeprüfung statt) gibt es einige spezielle Techniken, die es nicht ganz richtig verstanden, aber für alle "normalen" Klassen-Definitionen, beschreiben Sie Sie genau.
InformationsquelleAutor der Antwort ncoghlan
Ich verwendet die folgenden:
Wollte ich Sie nicht geben Sie den aktuellen Modul-name in
InformationsquelleAutor der Antwort rmc
InformationsquelleAutor der Antwort drruggeri