-1
votes

Pourquoi les variables d'instance doivent-elles être définies à l'intérieur des méthodes?

Pourquoi les variables d'instance doivent-elles être définies à l'intérieur des méthodes? En d'autres termes, pourquoi ne doit être utilisé que pour définir de nouvelles variables à l'intérieur des méthodes d'une classe. Pourquoi ne pouvez-vous pas définir les variables en utilisant soi-même dans le cadre de la classe, mais en dehors des méthodes.

"Les variables d'instance sont ces variables pour lesquelles chaque objet de classe a sa propre copie de celui-ci" - Cette définition ne dit rien sur les méthodes. Donc, étant donné que la définition ne mentionne pas les méthodes, pourquoi ne pouvez-je pas définir une variable d'instance (en d'autres termes, utilisez-la pour définir une nouvelle variable) à l'intérieur d'une classe, mais en dehors d'une méthode?


3 commentaires

Pourquoi pensez-vous que vous ne pouvez pas? Quelle est votre raison de croire que?


Parce que dans la classe auto n'existe pas, il est passé dans les appels de méthode. Notez que auto n'est pas un mot réservé.


Checkout docs.pytthon.org/3.7/TorTorial/classes.html#Class -Objects


4 Réponses :


0
votes

Parce que le mécanisme utilisé par Python pour faire face à OOP est très simple. Il n'y a pas de syntaxe spéciale pour définir réellement les classes, le mot-clé est une couche très mince sur ce qui constitue la création d'un dict . Tout ce que vous définissez à l'intérieur d'un classe FOO: finalement finit comme le contenu de foo .__ dict __ . Il n'y a donc pas de syntaxe pour définir les attributs de l'instance résultant de l'appelant foo () . Vous ajoutez des attributs d'instance simplement en les attachant à l'objet que vous obtenez de l'appelant foo () , qui est auto dans __ init __ ou d'autres méthodes d'instance.


0 commentaires

2
votes

python nécessite la référence d'objet (implicite ou explicite ceci en Java, par exemple) pour être explicite. Méthodes intérieures - Fonctions liées - Le premier paramètre de la définition de la fonction est l'instance. (Ceci est classiquement appelé auto mais vous pouvez utiliser n'importe quel nom.)

si vous définissez xxx

il n'y a pas auto < / code> référence, contrairement, par exemple Java, où ceci est implicite.


0 commentaires

0
votes

Pour cela pour répondre, vous devez connaître un peu comment fonctionne l'interprète Python.

En général, chaque définition de classe et de méthode sont des objets distincts. Ce que vous faites lorsque vous appelez une méthode, c'est que vous passez l'instance de classe comme premier paramètre à la méthode. Avec cela, la méthode sait sur quelle instance il exécute (et donc où allouer des variables d'instance à). Cela compte cependant que des méthodes d'instance. Bien sûr, vous pouvez également créer des méthodes de classe avec @classmethod Celles-ci prennent le type de classe comme argument au lieu d'une instance et ne peuvent donc pas être utilisés pour créer des variables sur le contexte auto . < / p>


0 commentaires

0
votes

Pourquoi les variables d'instance doivent-elles être définies à l'intérieur des méthodes?

Ils ne le font pas. Vous pouvez les définir de n'importe où, tant que vous avez une instance (d'un type mutable): xxx blockQuote>

En d'autres termes, pourquoi ne doit être utilisé que pour définir de nouvelles variables à l'intérieur des méthodes d'une classe. Pourquoi ne pouvez-vous pas définir les variables en utilisant soi-même dans le cadre de la classe, mais en dehors des méthodes.

auto (qui n'est qu'une convention de dénomination, Il y a Absolument rien de magique ici ) est utilisé pour représenter l'instance actuelle. Comment pouvez-vous l'utiliser au niveau de haut niveau de la classe où vous n'avez aucune instance du tout (et même pas la classe elle-même FWIW)?

Définition des «membres» de la classe à la classe supérieure - Le niveau est surtout une chose de langues statiques, où les "objets" sont principalement (techniquement) des structures (structs de style C ou des enregistrements de style Pascal si vous préférez) avec une structure de mémoire définie statique.

python est une langue dynamique qui utilise plutôt dict comme structure de données de support, donc personnobj.attribute est généralement (moins d'attributs calculés, etc.) résolus comme TOOOBJ .__ DICT __ ["Attribut"] (et TOOROBJ.ATTRIBUTE = VALUE AS TOOOBJ .__ DICT __ ["Attribute] = valeur ).

SO 1 / Il n'a pas besoin d'avoir une structure de données fixe, explicite définie, et que 2 / pourtant, il est nécessaire d'avoir une instance à la fin pour définir un attribut sur celui-ci. < P> Notez que vous pouvez forcer une classe à utiliser une structure de mémoire fixe (à la place d'une dicte simple) Utilisation de machines à sous , mais vous aurez toujours besoin de définir les valeurs de l'intérieur d'une méthode (canoniquement le __ init __ , qui existe pour cette raison même: initialisation des attributs de l'instance). < / p>


0 commentaires