Maison développement back-end Tutoriel Python variables de classe python et variables d'instance

variables de classe python et variables d'instance

Oct 31, 2019 am 10:56 AM
python

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).

variables de classe python et variables d'instance

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()
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Apr 01, 2025 pm 02:48 PM

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 ...

Quelle est la raison pour laquelle les fichiers de stockage persistants de pipeline ne peuvent pas être écrits lors de l'utilisation du robot Scapy? Quelle est la raison pour laquelle les fichiers de stockage persistants de pipeline ne peuvent pas être écrits lors de l'utilisation du robot Scapy? Apr 01, 2025 pm 04:03 PM

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 ...

Quelle est la raison pour laquelle le pool de processus Python gère les demandes TCP simultanées et fait coincé le client? Quelle est la raison pour laquelle le pool de processus Python gère les demandes TCP simultanées et fait coincé le client? Apr 01, 2025 pm 04:09 PM

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. ...

Comment afficher les fonctions originales encapsulées en interne par Python Functools.Partial Objet? Comment afficher les fonctions originales encapsulées en interne par Python Functools.Partial Objet? Apr 01, 2025 pm 04:15 PM

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

Python multiplateform de bureau de bureau de bureau: quelle bibliothèque GUI est la meilleure pour vous? Python multiplateform de bureau de bureau de bureau: quelle bibliothèque GUI est la meilleure pour vous? Apr 01, 2025 pm 05:24 PM

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 ...

Dessin graphique de sablier Python: comment éviter les erreurs variables non définies? Dessin graphique de sablier Python: comment éviter les erreurs variables non définies? Apr 01, 2025 pm 06:27 PM

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...

Comment compter et trier efficacement de grands ensembles de données de produit dans Python? Comment compter et trier efficacement de grands ensembles de données de produit dans Python? Apr 01, 2025 pm 08:03 PM

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 ...

Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Apr 01, 2025 pm 05:09 PM

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 ...

See all articles