Partage
  • Partager sur Facebook
  • Partager sur Twitter

__new__ et class imbriquées

Sujet résolu
    16 mai 2014 à 20:57:20

    Salut les experts,

    class Foo(object):
        class Bar(object):
        
            def __new__(cls):
                instance = super(Bar,cls).__new__(cls)
                return instance
    
        Bar()

    et bien sûr ça ne fonctionne pas, seulement je ne sais pas pourquoi.

    soit Foo, soit Bar est inconnu ...

    j'ai dans l'idée qe l'imbrication n'y est pas pour rien.

    • Partager sur Facebook
    • Partager sur Twitter

    Python c'est bon, mangez-en. 

      17 mai 2014 à 7:58:07

      Bon finalement c'est une question de portée du scope.

      Apparemment pas d'autres solutions que d'extraire Bar de Foo.

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

      Anonyme
        17 mai 2014 à 10:38:10

        Bar n'étant pas une méthode de classe, ça me semble logique que ça ne fonctionne pas dans la classe Foo...

        Maintenant j'ai peut-être pas compris ce que tu souhaitais faire.

        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2014 à 12:44:12

          pour simplifier:

          class foo:
              value = 5
              class bar:
                  print(foo.value)
              
          NameError: name 'foo' is not defined
          ainsi les variables de foo sont hors de portée de bar ... logique ?
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

          Anonyme
            17 mai 2014 à 13:15:30

            Tu peux aussi simplement faire sans super() : instance = object.__new__(cls) ou avec super() : instance = super(type(cls), ...)

            • Partager sur Facebook
            • Partager sur Twitter
              17 mai 2014 à 14:47:45

              .

              -
              Edité par quelqun_dautre 17 mai 2014 à 14:51:00

              • Partager sur Facebook
              • Partager sur Twitter
              yjltg.
              Anonyme
                17 mai 2014 à 15:56:38

                Comme je l'avais déjà dis, sans méthode tu ne peux pas faire fonctionner une classe. Dans ta classe bar, il te manque la méthode pour exécuter ta fonction print(...)

                class foo:
                    value = 5
                    class bar:
                        def __init__(self):
                            print(foo.value)
                
                f = foo()
                b = f.bar()

                Est-ce le fonctionnement que tu recherches ?

                • Partager sur Facebook
                • Partager sur Twitter
                  17 mai 2014 à 17:12:54

                  Je crois que ce qu'il cherchait à faire, c'est d'accéder aux éléments de foo directement dans bar, sans avoir a préfixer les noms par "foo.", comme c'est fait par exemple lors de fonctions imbriquées (closures).

                  • Partager sur Facebook
                  • Partager sur Twitter
                  yjltg.

                  __new__ et class imbriquées

                  × 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