Dans mon fichier principal de mon projet Python3, je souhaite afficher le chemin de définition en pointillé de la classe importée sous forme de chaîne.
Ma classe importée:
Est nommée WoodCuting et se trouve dans constants/dimensions.py.
class WoodCuting():
WIDTH = 12
HEIGHT = 12
Ce que je veux:
Chemin de définition en pointillé de la classe importée sous forme de chaîne - constants.dimensions.WoodCuting.
Ce que j'ai essayé: p >
str (type (WoodCuting)) renvoie constants.dimensions.WoodCuting - ce qui est exactement ce que je veux. Cependant, ce n'est pas une solution fiable.
Des idées?
3 Réponses :
Essayez ceci
import inspect
class WoodCuting():
WIDTH = 12
HEIGHT = 12
a=inspect.getfile(WoodCuting)
print (a)
Cela renvoie /constants/dimensions.py à la place constants.dimensions.WoodCuting .
En supposant que WoodCuting se trouve dans constants/dimensions.py:
from constants.dimensions import WoodCuting
def get_full_name(c):
return c.__class__.__module__ + '.' + c.__class__.__name__
print(get_full_name(WoodCuting()))
renvoie constantes.dimensions.WoodCuting code>.
Vous pouvez le faire avec le __module__ de l'objet et Attributs __qualname__ .
class Foo:
class Bar:
pass
>>> '.'.join((constants.dimensions.Foo.Bar.__module__, constants.dimensions.Foo.Bar.__qualname__))
'constants.dimensions.Foo.Bar'
L'utilisation de __qualname__ plutôt que de __name__ signifie que vous obtenez le résultat correct pour les objets imbriqués.
Disons que cette classe est dans le module:
>>> '.'.join((WoodCuting.__module__, WoodCuting.__qualname__)) 'constants.dimensions.WoodCuting'