0
votes

Le nom de la fonction et le nom de classe sont identiques. Comment fonctionne le compilateur? Comment ou pourquoi?

Si la classe est appelée, pourquoi le constructeur n'est pas imprimé de la déclaration. Si la classe n'est pas appelée, alors pourquoi cette déclaration d'impression est fonctionnée? Les deux fois, nous appelons la fonction d'impression extérieure mais une seule fois fonctionne uniquement?

exemple.py xxx

sortie: xxx


3 commentaires

def extérieur écrase classe externe dans la portée que vous avez définie ici. "Imprimer" est imprimé car il est appelé dans la définition de la classe de classe extérieure mais pas dans le constructeur. Vous avez appelé la fonction externe (deux fois), et vous n'avez jamais instancié la classe externe car il n'existe plus.


Que impression ("print") est exécuté lors de l'importation de module.


Essayez Imprimer (type (externe))


3 Réponses :


0
votes

def extérieur écrasé classe externe dans la portée que vous avez définie ici. "Imprimer" est imprimé car il s'appelle dans la définition de la classe de externe mais pas dans le constructeur. Vous avez appelé la fonction externe (deux fois) et que vous n'aviez jamais instancié la classe externe car il n'existe plus.

Si vous exécutez ceci dans la console, c'est apparent. Avant de redéfinir extérieur en fonction, l'instruction impression dans la définition de la classe est exécutée:

 Entrez la description de l'image ici


0 commentaires

2
votes

Il existe deux scopes différentes ici - une pièce similaire à l'aide de la portée du module au lieu de la portée de la classe:

outer = class:
    print("Creating class outer")
    # ... etc. ...

outer = def(msg):
    # you get the idea 


0 commentaires

1
votes

Imprimer ("Imprimer") est exécuté lorsque la classe est définie, pas lorsqu'elle est initialisée. def extérieur (msg): ... remplace ensuite la définition de la classe. Par conséquent, __ init __ n'est jamais appelé.

de la documentation:

En pratique, les déclarations à l'intérieur d'une définition de classe seront généralement des définitions de fonction, mais d'autres déclarations sont autorisées et parfois utiles [...]

https://docs.python.org/3 /Tutorial/classes.html#Class-Definition-Syntax


0 commentaires