variables de classe python et variables d'instance
Nous savons que quels que soient les attributs ou les méthodes définis dans la classe, ils ne peuvent pas être directement appelés en dehors de la classe. Par conséquent, nous pouvons complètement considérer la classe comme une portée indépendante (appelée espace de noms de classe), alors les attributs de classe sont. en fait des variables définies dans l'espace de noms de classe (les méthodes de classe sont en fait des fonctions définies dans l'espace de noms de classe).
Selon l'emplacement où l'attribut est défini, les attributs de classe peuvent être subdivisés en attributs de classe (représentés ultérieurement par des variables de classe) et en attributs d'instance (représentés ultérieurement par des variables d'instance) .
Variables de classe (attributs de classe) (Apprentissage recommandé : Tutoriel vidéo Python)
Les variables de classe font référence à celles définies dans la classe, mais dans Variables en dehors de chaque méthode de classe. La caractéristique des variables de classe est que tous les objets instanciés d'une classe peuvent partager la valeur de la variable de classe, c'est-à-dire que les variables de classe peuvent être utilisées comme ressources publiques dans tous les objets instanciés.
Notez qu'il est recommandé d'accéder directement aux variables de classe à l'aide des noms de classe, mais elles sont également accessibles à l'aide des noms d'objet.
Par exemple, le code suivant définit une classe Address et plusieurs attributs de classe pour la classe :
class Address : detail = '广州' post_code = '510660' def info (self): # 尝试直接访问类变量 #print(detail) # 报错 # 通过类来访问类变量 print(Address.detail) # 输出 广州 print(Address.post_code) # 输出 510660 #创建 2 个类对象 addr1 = Address() addr1.info() addr2 = Address() addr2.info() # 修改Address类的类变量 Address.detail = '佛山' Address.post_code = '460110' addr1.info() addr2.info()
Dans ce programme, les deuxième et troisième lignes de code définissent deux variables de classe. Lorsque la méthode info() de l'objet Address est appelée pour la première fois dans le programme pour générer deux variables de classe, les valeurs initiales des deux variables de classe seront affichées. Ensuite, le programme modifie les valeurs des deux variables de classe via la classe Address. Ainsi, lorsque le programme génère les deux variables de classe via la méthode info() pour la deuxième fois, les valeurs modifiées des deux variables de classe seront être émis.
Exécutez le code ci-dessus et vous verrez le résultat suivant :
广州 510660 广州 510660 佛山 460110 佛山 460110
Comme vous pouvez le voir sur le résultat, addr1 et addr2 partagent des variables de classe. En d'autres termes, changer la valeur de la classe. La variable fonctionnera pour tous les objets instanciés de cette classe.
Les variables d'instance font référence à des attributs définis dans les méthodes d'une classe. Sa particularité est qu'elles n'agissent que sur l'objet qui appelle la méthode.
Notez que les variables d'instance ne sont accessibles que via les noms d'objet et ne sont pas accessibles directement via les noms de classe.
Python permet d'accéder aux variables de classe via des objets, mais la valeur des variables de classe ne peut pas être modifiée via des objets. Car modifier la valeur d'une variable de classe via un objet, ce n'est pas "attribuer une valeur à la variable de classe", mais définir une nouvelle variable d'instance.
Par exemple, le programme suivant :
class Inventory: # 定义两个类变量 item = '鼠标' quantity = 2000 # 定义实例方法 def change(self, item, quantity): # 下面赋值语句不是对类变量赋值,而是定义新的实例变量 self.item = item self.quantity = quantity # 创建Inventory对象 iv = Inventory() iv.change('显示器', 500) # 访问iv的item和quantity实例变量 print(iv.item) # 显示器 print(iv.quantity) # 500 # 访问Inventory的item和quantity类变量 print(Inventory.item) # 鼠标 print(Inventory.quantity) # 2000
Dans le programme ci-dessus, les 8ème et 9ème lignes de code attribuent des valeurs aux variables d'article et de quantité à travers des exemples , qui ressemble beaucoup aux affectations de variables de classe, mais ce n'est pas le cas, ce qu'ils font est de redéfinir deux variables d'instance.
Dans une classe, les variables d'instance et les variables de classe peuvent avoir le même nom, mais dans ce cas, l'utilisation de l'objet classe ne pourra pas appeler la variable de classe car elle préférera la variable d'instance, c'est donc également déconseillé pour la raison "variables de classe utilisant l'appel de nom d'objet".
Après avoir appelé la méthode change() de l'objet Inventory, le programme ci-dessus accède aux variables d'article et de quantité de l'objet Inventory. Puisque l'objet lui-même possède ces deux variables d'instance, le programme affichera les variables d'instance de. la valeur de l'objet ; ensuite, le programme accède à ses variables de classe d'article et de quantité via l'inventaire. À ce moment, les variables de classe sont réellement accessibles.
Exécutez le programme ci-dessus et vous verrez le résultat suivant :
显示器 500 鼠标 2000
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Lorsque vous utilisez Scapy Crawler, la raison pour laquelle les fichiers de stockage persistants ne peuvent pas être écrits? Discussion Lorsque vous apprenez à utiliser Scapy Crawler pour les robots de données, vous rencontrez souvent un ...

Python Process Pool gère les demandes TCP simultanées qui font coincé le client. Lorsque vous utilisez Python pour la programmation réseau, il est crucial de gérer efficacement les demandes TCP simultanées. ...

Explorez profondément la méthode de visualisation de Python Functools.Partial Objet dans Functools.Partial en utilisant Python ...

Choix de la bibliothèque de développement d'applications de bureau multiplateforme Python De nombreux développeurs Python souhaitent développer des applications de bureau pouvant s'exécuter sur Windows et Linux Systems ...

Précision avec Python: Source de sablier Dessin graphique et vérification d'entrée Cet article résoudra le problème de définition variable rencontré par un novice Python dans le programme de dessin graphique de sablier. Code...

Conversion et statistiques de données: traitement efficace des grands ensembles de données Cet article introduira en détail comment convertir une liste de données contenant des informations sur le produit en une autre contenant ...

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...
