Partage
  • Partager sur Facebook
  • Partager sur Twitter

Import dynamique de module, nom de la classe

    17 mai 2013 à 23:07:11

    Bonsoir,

    Je me demandais, est-ce qu'il est possible, si un module ne contient qu'une seule classe, de connaitre le nom de cette classe ?

    Exemple:

    plugin = __import__(name)
    classe = plugin.MyClass()
    

    Là je suis obligé d'appeler ma classe MyClass, mais si je voulais lui donner un nom plus explicite, et récupérer ce nom depuis un autre module, de manière générique, comment je pourrais faire ?

    Bien à vous.

    • Partager sur Facebook
    • Partager sur Twitter
    http://maymayhem.fr/
      18 mai 2013 à 7:21:46

      >>> module = __import__('sys')
      >>> 'argv' in module.__dict__
      True
      

      Non ?

      • Partager sur Facebook
      • Partager sur Twitter
      Zeste de Savoir, le site qui en a dans le citron !
        18 mai 2013 à 10:42:42

        J'ai False comme retour. Mais je ne comprends pas bien à quoi ça sert.
        • Partager sur Facebook
        • Partager sur Twitter
        http://maymayhem.fr/
          18 mai 2013 à 14:52:26

          Quand tu importes un module, tu peux utiliser son attribut __dict__ (ou la méthode getattr) pour retrouver tous les objets (classes, fonctions, ...) que tu as importés.

          -
          Edité par nohar 18 mai 2013 à 14:54:04

          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            18 mai 2013 à 17:59:55

            Oui, ça je le sais, c'est donc bien pour ça que je me demande à quoi ça sert.

            {'get': <function get at 0x7f43b8161830>, 'QtCore': <module 'PyQt4.QtCore' from '/usr/lib/python3.3/site-packages/PyQt4/QtCore.so'>, '__name__': 'feed', '__loader__': <_frozen_importlib.SourceFileLoader object at 0x7f43c9a5bdd0>, 'ViewPerso': <class 'view.ViewPerso'>, 'sqlite3': <module 'sqlite3' from '/usr/lib/python3.3/sqlite3/__init__.py'>, 'BeautifulSoup': <class 'bs4.BeautifulSoup'>, '__initializing__': False, 'ViewDelegate': <class 'view_delegate.ViewDelegate'>, '__package__': '', 'QtSql': <module 'PyQt4.QtSql' from '/usr/lib/python3.3/site-packages/PyQt4/QtSql.so'>, 'ModelPerso': <class 'model.ModelPerso'>, 'MyClass': <class 'feed.MyClass'>, '__file__': '/home/djipey/informatique/python/bibli/plugins/feed.py', 'QtGui': <module 'PyQt4.QtGui' from '/usr/lib/python3.3/site-packages/PyQt4/QtGui.so'>, '__builtins__': {'super': <class 'super'>, 'ConnectionError': <class 'ConnectionError'>, 'ResourceWarning': <class 'ResourceWarning'>, 'slice': <class 'slice'>, 'chr': <built-in function chr>, 'frozenset': <class 'frozenset'>, 'compile': <built-in function compile>, 'EnvironmentError': <class 'OSError'>, 'UnboundLocalError': <class 'UnboundLocalError'>, 'None': None, 'format': <built-in function format>, 'help': Type help() for interactive help, or help(object) for help about object., 'iter': <built-in function iter>, 'pow': <built-in function pow>, 'setattr': <built-in function setattr>, 'enumerate': <class 'enumerate'>, 'repr': <built-in function repr>, 'InterruptedError': <class 'InterruptedError'>, 'hasattr': <built-in function hasattr>, 'ConnectionAbortedError': <class 'ConnectionAbortedError'>, 'oct': <built-in function oct>, 'PermissionError': <class 'PermissionError'>, 'exec': <built-in function exec>, 'BufferError': <class 'BufferError'>, 'True': True, 'list': <class 'list'>, 'BaseException': <class 'BaseException'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ProcessLookupError': <class 'ProcessLookupError'>, 'sum': <built-in function sum>, 'UserWarning': <class 'UserWarning'>, 'globals': <built-in function globals>, 'FileNotFoundError': <class 'FileNotFoundError'>, 'license': Type license() to see the full license text, 'TypeError': <class 'TypeError'>, 'hex': <built-in function hex>, 'credits':     Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
                for supporting Python development.  See www.python.org for more information., 'len': <built-in function len>, 'RuntimeWarning': <class 'RuntimeWarning'>, '__doc__': "Built-in functions, exceptions, and other objects.\n\nNoteworthy: None is the `nil' object; Ellipsis represents `...' in slices.", 'eval': <built-in function eval>, 'NotImplementedError': <class 'NotImplementedError'>, 'tuple': <class 'tuple'>, 'bin': <built-in function bin>, 'SyntaxWarning': <class 'SyntaxWarning'>, 'IsADirectoryError': <class 'IsADirectoryError'>, 'KeyError': <class 'KeyError'>, 'IOError': <class 'OSError'>, 'dir': <built-in function dir>, 'UnicodeEncodeError': <class 'UnicodeEncodeError'>, 'IndexError': <class 'IndexError'>, 'all': <built-in function all>, 'BytesWarning': <class 'BytesWarning'>, 'RuntimeError': <class 'RuntimeError'>, 'TimeoutError': <class 'TimeoutError'>, 'DeprecationWarning': <class 'DeprecationWarning'>, 'FutureWarning': <class 'FutureWarning'>, 'TabError': <class 'TabError'>, 'issubclass': <built-in function issubclass>, 'bool': <class 'bool'>, 'divmod': <built-in function divmod>, 'int': <class 'int'>, 'bytearray': <class 'bytearray'>, 'callable': <built-in function callable>, 'complex': <class 'complex'>, 'UnicodeTranslateError': <class 'UnicodeTranslateError'>, 'open': <built-in function open>, 'getattr': <built-in function getattr>, '__name__': 'builtins', 'type': <class 'type'>, 'set': <class 'set'>, 'exit': Use exit() or Ctrl-D (i.e. EOF) to exit, '__build_class__': <built-in function __build_class__>, 'NotADirectoryError': <class 'NotADirectoryError'>, 'UnicodeWarning': <class 'UnicodeWarning'>, 'reversed': <class 'reversed'>, 'Warning': <class 'Warning'>, 'str': <class 'str'>, 'GeneratorExit': <class 'GeneratorExit'>, 'EOFError': <class 'EOFError'>, 'ord': <built-in function ord>, 'ArithmeticError': <class 'ArithmeticError'>, 'filter': <class 'filter'>, 'range': <class 'range'>, 'OSError': <class 'OSError'>, 'StopIteration': <class 'StopIteration'>, 'quit': Use quit() or Ctrl-D (i.e. EOF) to exit, 'Exception': <class 'Exception'>, 'min': <built-in function min>, 'classmethod': <class 'classmethod'>, 'map': <class 'map'>, 'ConnectionRefusedError': <class 'ConnectionRefusedError'>, 'id': <built-in function id>, '__import__': <built-in function __import__>, 'max': <built-in function max>, 'Ellipsis': Ellipsis, 'OverflowError': <class 'OverflowError'>, '__package__': None, 'NameError': <class 'NameError'>, 'PendingDeprecationWarning': <class 'PendingDeprecationWarning'>, 'locals': <built-in function locals>, 'input': <built-in function input>, 'SystemExit': <class 'SystemExit'>, 'NotImplemented': NotImplemented, 'copyright': Copyright (c) 2001-2013 Python Software Foundation.
            All Rights Reserved.
            
            Copyright (c) 2000 BeOpen.com.
            All Rights Reserved.
            
            Copyright (c) 1995-2001 Corporation for National Research Initiatives.
            All Rights Reserved.
            
            Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
            All Rights Reserved., 'property': <class 'property'>, 'UnicodeError': <class 'UnicodeError'>, 'print': <built-in function print>, 'LookupError': <class 'LookupError'>, 'sorted': <built-in function sorted>, '__debug__': True, 'IndentationError': <class 'IndentationError'>, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, 'AssertionError': <class 'AssertionError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'FloatingPointError': <class 'FloatingPointError'>, 'MemoryError': <class 'MemoryError'>, 'round': <built-in function round>, 'ascii': <built-in function ascii>, 'SyntaxError': <class 'SyntaxError'>, 'ValueError': <class 'ValueError'>, 'ImportError': <class 'ImportError'>, 'zip': <class 'zip'>, 'ReferenceError': <class 'ReferenceError'>, 'any': <built-in function any>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'bytes': <class 'bytes'>, 'KeyboardInterrupt': <class 'KeyboardInterrupt'>, 'False': False, 'vars': <built-in function vars>, 'object': <class 'object'>, 'dict': <class 'dict'>, 'FileExistsError': <class 'FileExistsError'>, 'AttributeError': <class 'AttributeError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'isinstance': <built-in function isinstance>, 'BlockingIOError': <class 'BlockingIOError'>, 'next': <built-in function next>, 'staticmethod': <class 'staticmethod'>, 'SystemError': <class 'SystemError'>, 'hash': <built-in function hash>, 'delattr': <built-in function delattr>, 'ImportWarning': <class 'ImportWarning'>, 'memoryview': <class 'memoryview'>, 'abs': <built-in function abs>, 'ZeroDivisionError': <class 'ZeroDivisionError'>, 'float': <class 'float'>}, '__doc__': None, '__cached__': '/home/djipey/informatique/python/bibli/plugins/__pycache__/feed.cpython-33.pyc'}

            Ça, c'est le dictionnaire en question. Comme tu le vois, on voit bien l'objet MyClass, mais impossible de le différencier des autres. Donc ça ne répond pas vraiment à la question.

            • Partager sur Facebook
            • Partager sur Twitter
            http://maymayhem.fr/

            Import dynamique de module, nom de la classe

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown