Python >> Tutoriel Python >  >> Python

Variables d'instance Python expliquées avec des exemples

Il existe plusieurs types de variables en Python :

  • Variables d'instance dans une classe :on les appelle champs ou attributs d'un objet
  • Variables locales :Variables dans une méthode ou un bloc de code
  • Paramètres  :Variables dans les déclarations de méthode
  • Variables de classe :Cette variable est partagée entre tous les objets d'une classe

En programmation orientée objet, lorsque nous concevons une classe, nous utilisons des variables d'instance et des variables de classe.

  • Variables d'instance  :Si la valeur d'une variable varie d'un objet à l'autre, ces variables sont appelées variables d'instance.
  • Variables de classe :Une variable de classe est une variable qui est déclarée à l'intérieur de la classe, mais en dehors de toute méthode d'instance ou __init__() méthode.

Après avoir lu cet article, vous apprendrez :

  • Comment créer et accéder aux variables d'instance
  • Modifier les valeurs des variables d'instance
  • Comment ajouter ou supprimer dynamiquement des variables d'instance
  • Portée d'une variable d'instance

Qu'est-ce qu'une variable d'instance en Python ?

Si la valeur d'une variable varie d'un objet à l'autre, ces variables sont appelées variables d'instance . Pour chaque objet, une copie séparée de la variable d'instance sera créée.

Les variables d'instance ne sont pas partagées par les objets. Chaque objet a sa propre copie de l'attribut d'instance. Cela signifie que pour chaque objet d'une classe, la valeur de la variable d'instance est différente.

Lorsque nous créons des classes en Python, les méthodes d'instance sont utilisées régulièrement. nous devons créer un objet pour exécuter le bloc de code ou l'action définie dans la méthode d'instance.

Les variables d'instance sont utilisées dans la méthode d'instance. Nous utilisons la méthode d'instance pour effectuer un ensemble d'actions sur les données/valeurs fournies par la variable d'instance.

Nous pouvons accéder à la variable d'instance en utilisant l'objet et le point (. ) opérateur.

En Python, pour travailler avec une variable d'instance et une méthode, nous utilisons le self mot-clé. Nous utilisons le self mot-clé comme premier paramètre d'une méthode. Le self fait référence à l'objet courant.

Créer des variables d'instance

Les variables d'instance sont déclarées dans une méthode en utilisant le self mot-clé. Nous utilisons un constructeur pour définir et initialiser les variables d'instance. Voyons l'exemple pour déclarer une variable d'instance en Python.

Exemple :

Dans l'exemple suivant, nous créons deux variables d'instance name et age dans le Student classe.

class Student:
    # constructor
    def __init__(self, name, age):
        # Instance variable
        self.name = name
        self.age = age

# create first object
s1 = Student("Jessa", 20)

# access instance variable
print('Object 1')
print('Name:', s1.name)
print('Age:', s1.age)

# create second object
s2= Student("Kelly", 10)

# access instance variable
print('Object 2')
print('Name:', s2.name)
print('Age:', s2.age)

Sortie

Object 1
Name: Jessa
Age: 20

Object 2
Name: Kelly
Age: 10

Remarque :

  • Lorsque nous avons créé un objet, nous avons transmis les valeurs aux variables d'instance à l'aide d'un constructeur.
  • Chaque objet contient des valeurs différentes car nous avons transmis des valeurs différentes à un constructeur pour initialiser l'objet.
  • Variable déclarée en dehors de __init__() appartiennent à la classe. Ils sont partagés par toutes les instances.

Modifier les valeurs des variables d'instance

Nous pouvons modifier la valeur de la variable d'instance et lui attribuer une nouvelle valeur en utilisant la référence de l'objet.

Remarque  :lorsque vous modifiez les valeurs de la variable d'instance d'un objet, les modifications ne seront pas répercutées dans les objets restants car chaque objet conserve une copie distincte de la variable d'instance.

Exemple

class Student:
    # constructor
    def __init__(self, name, age):
        # Instance variable
        self.name = name
        self.age = age

# create object
stud = Student("Jessa", 20)

print('Before')
print('Name:', stud.name, 'Age:', stud.age)

# modify instance variable
stud.name = 'Emma'
stud.age = 15

print('After')
print('Name:', stud.name, 'Age:', stud.age)

Sortie

Before
Name: Jessa Age: 20

After
Name: Emma Age: 15

Moyens d'accéder à la variable d'instance

Il existe deux manières d'accéder à la variable d'instance de la classe :

  • Dans la classe dans la méthode d'instance en utilisant la référence d'objet (self )
  • Utiliser getattr() méthode

Exemple 1 :Accéder à la variable d'instance dans la méthode d'instance

class Student:
    # constructor
    def __init__(self, name, age):
        # Instance variable
        self.name = name
        self.age = age

    # instance method access instance variable
    def show(self):
        print('Name:', stud.name, 'Age:', stud.age)

# create object
stud = Student("Jessa", 20)

# call instance method
stud.show()

Sortie

Name: Jessa Age: 20

Exemple 2  :Accéder à la variable d'instance à l'aide de getattr()

getattr(Object, 'instance_variable')

Passez la référence de l'objet et le nom de la variable d'instance au getattr() méthode pour obtenir la valeur d'une variable d'instance.

class Student:
    # constructor
    def __init__(self, name, age):
        # Instance variable
        self.name = name
        self.age = age

# create object
stud = Student("Jessa", 20)

# Use getattr instead of stud.name
print('Name:', getattr(stud, 'name'))
print('Age:', getattr(stud, 'age'))

Sortie

Name: Jessa
Age: 20

Conventions de dénomination des variables d'instance

  • Les noms des variables d'instance doivent être tous en minuscules. Par exemple, id
  • Les mots d'un nom de variable d'instance doivent être séparés par un trait de soulignement. Par exemple, store_name
  • Les variables d'instance non publiques doivent commencer par un seul trait de soulignement
  • Si un nom d'instance doit être mutilé, deux traits de soulignement peuvent commencer son nom

Ajouter dynamiquement une variable d'instance à un objet

Nous pouvons ajouter des variables d'instance de l'extérieur de la classe à un objet particulier. Utilisez la syntaxe suivante pour ajouter la nouvelle variable d'instance à l'objet.

object_referance.variable_name = value

Exemple :

class Student:
    def __init__(self, name, age):
        # Instance variable
        self.name = name
        self.age = age

# create object
stud = Student("Jessa", 20)

print('Before')
print('Name:', stud.name, 'Age:', stud.age)

# add new instance variable 'marks' to stud
stud.marks = 75
print('After')
print('Name:', stud.name, 'Age:', stud.age, 'Marks:', stud.marks)

Sortie

Before
Name: Jessa Age: 20

After
Name: Jessa Age: 20 Marks: 75

Remarque :

  • Nous ne pouvons pas ajouter une variable d'instance à une classe depuis l'extérieur car les variables d'instance appartiennent à des objets.
  • L'ajout d'une variable d'instance à un objet ne sera pas répercuté sur les objets restants car chaque objet possède une copie distincte de la variable d'instance.

Supprimer dynamiquement la variable d'instance

En Python, nous utilisons le del déclaration et delattr() fonction pour supprimer l'attribut d'un objet. Les deux font la même chose.

  • del déclaration :Le del mot clé est utilisé pour supprimer des objets. En Python, tout est un objet, donc le del Le mot-clé peut également être utilisé pour supprimer des variables, des listes ou des parties d'une liste, etc.
  • delattr() fonction :permet de supprimer dynamiquement une variable d'instance.

Remarque  :Lorsque nous essayons d'accéder à l'attribut supprimé, cela génère une erreur d'attribut.

Exemple 1 :Utilisation du del déclaration

class Student:
    def __init__(self, roll_no, name):
        # Instance variable
        self.roll_no = roll_no
        self.name = name

# create object
s1 = Student(10, 'Jessa')
print(s1.roll_no, s1.name)

# del name
del s1.name
# Try to access name variable
print(s1.name)

Sortie

10 Jessa
AttributeError: 'Student' object has no attribute 'name'

delattr() fonction

La fonction delattr() est utilisée pour supprimer l'attribut nommé de l'objet avec l'autorisation préalable de l'objet. Utilisez la syntaxe suivante.

delattr(object, name)
  • object :l'objet dont nous voulons supprimer l'attribut.
  • name :le nom de la variable d'instance que nous voulons supprimer de l'objet.

Exemple

class Student:
    def __init__(self, roll_no, name):
        # Instance variable
        self.roll_no = roll_no
        self.name = name

    def show(self):
        print(self.roll_no, self.name)

s1 = Student(10, 'Jessa')
s1.show()

# delete instance variable using delattr()
delattr(s1, 'roll_no')
s1.show()

Sortie

10 Jessa
AttributeError: 'Student' object has no attribute 'roll_no'

Accéder à la variable d'instance depuis une autre classe

Nous pouvons accéder aux variables d'instance d'une classe à partir d'une autre classe en utilisant la référence d'objet. C'est utile lorsque nous implémentons le concept d'héritage en Python et que nous voulons accéder à la variable d'instance de la classe parent à partir d'une classe enfant.

Comprenons cela à l'aide d'un exemple.

Dans cet exemple, le engine est une variable d'instance du Vehicle classer. Nous avons hérité d'un Vehicle class pour accéder à ses variables d'instance dans Car classe

class Vehicle:
    def __init__(self):
        self.engine = '1500cc'

class Car(Vehicle):
    def __init__(self, max_speed):
        # call parent class constructor
        super().__init__()
        self.max_speed = max_speed

    def display(self):
        # access parent class instance variables 'engine'
        print("Engine:", self.engine)
        print("Max Speed:", self.max_speed)

# Object of car
car = Car(240)
car.display()

Sortie

Engine: 1500cc
Max Speed: 240

Répertorier toutes les variables d'instance d'un objet

Nous pouvons obtenir la liste de toutes les variables d'instance de l'objet. Utilisez le __dict__ fonction d'un objet pour obtenir toutes les variables d'instance avec leur valeur.

Le __dict__ la fonction renvoie un dictionnaire qui contient le nom de la variable comme clé et la valeur de la variable comme valeur

Exemple :

class Student:
    def __init__(self, roll_no, name):
        # Instance variable
        self.roll_no = roll_no
        self.name = name

s1 = Student(10, 'Jessa')
print('Instance variable object has')
print(s1.__dict__)

# Get each instance variable
for key_value in s1.__dict__.items():
    print(key_value[0], '=', key_value[1])

Sortie :

Instance variable object has
{'roll_no': 10, 'name': 'Jessa'}

roll_no = 10
name = Jessa

Post précédent
Prochain article