Comment créer une classe en python?

Published: 29 mars 2021

Tags: Python;

DMCA.com Protection Status

Tutoriel sur la création et l'utilisation de classes en python:

Créer une classe simple en python

Pour créer une classe simple appelée par exemple "member", avec une seule propriété nommée s, il suffit de faire

class member: 
        s = 'Hello world !'

Ensuite, pour créer un objet à partir de cette classe (ou une instance "member" de la classe):

member_01 = member()

et pour obtenir la propriété nommée s:

member_01.s

donne ici

Hello world !

Note: pour créer une classe sans propriété, une solution est d'utiliser "pass":

class member: 
        pass

Utilisez la fonction init () pour attribuer des valeurs

Jusqu'à présent, notre classe n'est pas vraiment utile. L'étape suivante consiste à fournir des variables pour initialiser nos objets. Pour ce faire, créez une fonction init (), par exemple:

class member:

        def __init__(self, first_name, last_name, age):
                self.first_name = first_name
                self.last_name = last_name
                self.age = age

Maintenant, pour construire notre objet, nous devons fournir 3 variables:

member_01 = member("John", "Doe", 24)

print(member_01.first_name)
print(member_01.last_name)
print(member_01.age)

donne

John
Doe
24

Nous pouvons ensuite créer différents objets à partir du membre de la classe, par exemple

member_02 = member("Emma", "Watson", 30)

print(member_02.first_name)
print(member_02.last_name)
print(member_02.age)

donne

Emma
Watson
30

Ajouter un paramètre facultatif dans l'initialisation de la classe à l'aide de * args

Avec la classe suivante

class member:

        def __init__(self, first_name, last_name, age):
                self.first_name = first_name
                self.last_name = last_name
                self.age = age

si vous ajoutez une variable facultative, par exemple le sexe 'Male'

member_01 = member("John", "Doe", 24, 'Male')

vous obtiendrez le message d'erreur suivant:

TypeError: __init__() takes 4 positional arguments but 5 were given

Pour passer des variables supplémentaires, une solution consiste à utiliser * args:

class member:

        def __init__(self, first_name, last_name, age, *args):
                self.first_name = first_name
                self.last_name = last_name
                self.age = age

alors la ligne suivante ne renvoie aucun message d'erreur.

member_01 = member("John", "Doe", 24, 'Male')

Maintenant, vous pouvez faire quelque chose avec la variable optionnelle:

class member:

        def __init__(self, first_name, last_name, age, *args):
                self.first_name = first_name
                self.last_name = last_name
                self.age = age

                if 'Male' in args:
                        self.gender = 'male'

alors

member_01 = member("John", "Doe", 24, 'Male', 'White')

print(member_01.gender)

donne

male

Ajouter des paramètres facultatifs dans l'initialisation de la classe à l'aide de ** kwargs

Une autre solution consiste à utiliser ** kwargs, exemple

class member:

        def __init__(self, first_name, last_name, age, **kwargs):
                self.first_name = first_name
                self.last_name = last_name
                self.age = age

                if 'height' in kwargs:
                        self.height = kwargs['height']

member_01 = member("John", "Doe", 24, height=5.3, eye_color='green')

print(member_01.height)

donne:

5.3

Ajouter des méthodes

Il est également possible de définir des méthodes (c'est-à-dire la fonction définie à l'intérieur d'une classe). Par exemple définissons une fonction qui renvoie le nom complet:

class member:

        def __init__(self, first_name, last_name, age):
                self.first_name = first_name
                self.last_name = last_name
                self.age = age

        def full_name(self):
                return "Full name: {} {}".format(self.first_name,self.last_name)

alors

member_01 = member("John", "Doe", 24)

print(member_01.full_name())

donne

Full name: John Doe

Supprimer un objet

Pour supprimer un objet, faites simplement:

del member_01

Créer une classe enfant (Inheritance)

Une autre caractéristique importante des classes en python est appelée l'héritage de classe. Par exemple, réutilisons notre classe précédente:

class member:

        def __init__(self, first_name, last_name, age):
                self.first_name = first_name
                self.last_name = last_name
                self.age = age

        def full_name(self):
                return "Full name: {} {}".format(self.first_name,self.last_name)

Nous pouvons définir une sous-classe appelée par exemple "premium_member" ("child class") à partir du membre de la classe ( parent class):

class premium_member(member):
        pass

Ensuite, nous pouvons créer un nouvel objet à partir de premium_member

pm1 = premium_member("John", "Doe", 24)

er

print( pm1.first_name )

donne

John

Notez qu'ici la classe premium_member hérite de tout du membre de la classe. Même la méthode de l'objet définie dans le membre de la classe:

print( pm1.full_name() )

donne

Full name: John Doe

Maintenant, si vous essayez d'ajouter une fonction init dans la classe premium_member:

class premium_member(member):

        def __init__(self, first_name, last_name, age):
                pass

alors

pm1 = premium_member("John", "Doe", 24)

print( pm1.first_name )

renverra le message d'erreur:

AttributeError: 'premium_member' object has no attribute 'first_name'

car la fonction init () de "premium_member" remplace la fonction init () de la classe "member".

Pour éviter cela, une solution est d'ajouter member.init(self, first_name, last_name, age), comme ceci:

class premium_member(member):

        def __init__(self, first_name, last_name, age):
                member.__init__(self, first_name, last_name, age)

alors

pm1 = premium_member("John", "Doe", 24)

print( pm1.first_name )

donne

John

autre solution est d'utiliser super():

class premium_member(member):

        def __init__(self, first_name, last_name, age):
                super().__init__(first_name, last_name, age)

Dans la classe "premium_member", vous pouvez ensuite définir des méthodes supplémentaires, par exemple:

class premium_member(member):

        def __init__(self, first_name, last_name, age):
                super().__init__(first_name, last_name, age)

        def promo_code(self):
                return 1234

alors

pm1 = premium_member("John", "Doe", 24)

print( pm1.promo_code() )

donne

1234

Références