Frage

Wenn ein Objekt die Klasse oder Funktion eines Moduls ist, muss ich den absoluten Importpfad als Zeichenfolge abrufen. Beispiel:

>>> from a.b.c import foo
>>> get_import_path(foo)
'a.b.c.foo'

Ich habe versucht, das Modul zu inspizieren, aber das gibt nichts zu tun.

War es hilfreich?

Lösung

Was Sie versuchen zu tun, ist von Natur aus unmöglich. foo weiß einfach nicht, wie du es importiert hast - es könnte sogar auf verschiedene Arten importiert worden sein. Beispiel auf meiner Linux -Box:

>>> from os.path import normpath
>>> from posixpath import normpath as normpath2
>>> normpath is normpath2
True

So normpath und normpath2 sind das gleiche Funktionsobjekt. Es ist unmöglich, die Informationen so abzuleiten, wie sie importiert wurden.

Das heißt, es könnte manchmal helfen, das zu betrachten __module__ Attribut Ihrer Funktion:

>>> normpath.__module__
posixpath
>>> normpath2.__module__
posixpath

Das __module__ Das Attribut ist nicht immer definiert, und wenn es definiert ist, enthält es nicht immer die Informationen, nach denen Sie suchen.

Andere Tipps

Verwenden Sie das __file__ Attribut:

>>> import string
>>> string.__file__
'/usr/lib/python2.6/string.pyc'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top