Maison >développement back-end >Tutoriel Python >Quelle est la différence entre les variables définies à l'intérieur et à l'extérieur de `__init__()` en Python ?

Quelle est la différence entre les variables définies à l'intérieur et à l'extérieur de `__init__()` en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 03:54:02340parcourir

  What's the Difference Between Variables Defined Inside and Outside `__init__()` in Python?

Explorer la distinction entre les variables à l'intérieur et à l'extérieur de __init__()

Considérez les deux classes suivantes :

<code class="python">class WithClass ():
    def __init__(self):
        self.value = "Bob"
    def my_func(self):
        print(self.value)

class WithoutClass ():
    value = "Bob"

    def my_func(self):
        print(self.value)</code>

À première vue, ces classes semblent identiques. Cependant, une distinction subtile réside dans l'emplacement de la variable de valeur. Dans la première classe (WithClass), la valeur est initialisée dans la méthode __init__(), tandis que dans la deuxième classe (WithoutClass), elle est déclarée en dehors de la méthode.

Variables en dehors de __init__() (Class Attributs) vs variables à l'intérieur de __init__() (Attributs d'instance)

L'emplacement de la variable détermine s'il s'agit d'un attribut de classe ou d'un attribut d'instance.

  • Attributs de classe : Les variables déclarées en dehors de __init__() sont partagées par toutes les instances de la classe. Ils sont accessibles en utilisant le nom de la classe, tel que WithoutClass.value.
  • Attributs d'instance : Variables créées dans __init__() et précédées de self. sont spécifiques à chaque instance d’objet. Ils ne sont accessibles que via l'objet lui-même, tel que instance_of_WithClass.value.

Conséquences du placement

Cette distinction a des ramifications sur le comportement et la maintenance du code.

  • Utilisation dans les méthodes : Les attributs de classe sont disponibles pour toutes les méthodes de la classe, quel que soit l'endroit où elles sont déclarées. Les attributs d'instance, en revanche, doivent être déclarés avant de pouvoir être utilisés dans une méthode.
  • Accès depuis l'extérieur de la classe : Les attributs de classe sont accessibles depuis l'extérieur de la classe en utilisant la classe nom. Cependant, les attributs d'instance ne sont accessibles que via une instance de la classe.
  • Manipulation des attributs : Les attributs de classe affectent toutes les instances de la classe. La modification d'un attribut de classe changera sa valeur pour toutes les instances. En revanche, les attributs d'instance n'affectent que l'objet spécifique auquel ils appartiennent.

Choix de placement

Le choix de l'endroit où placer une variable dépend de la façon dont vous je veux qu'il se comporte au sein de la classe. Si vous souhaitez une valeur partagée qui reste constante entre les instances, utilisez un attribut de classe. Si vous souhaitez une valeur unique pour chaque instance, créez-la dans __init__() en tant qu'attribut d'instance.

En comprenant la distinction entre les variables à l'intérieur et à l'extérieur de __init__(), vous pouvez concevoir des classes avec un comportement clair et prévisible, éviter toute confusion et pièges potentiels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn