3
votes

Python 3 - Obtenir le chemin de définition de l'objet

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?


0 commentaires

3 Réponses :


0
votes

Essayez ceci

import inspect

class WoodCuting():
    WIDTH = 12
    HEIGHT = 12

a=inspect.getfile(WoodCuting)
print (a)


1 commentaires

Cela renvoie /constants/dimensions.py à la place constants.dimensions.WoodCuting .



2
votes

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


0 commentaires

5
votes

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'


0 commentaires