Tutoriel sur la création et l'utilisation de classes en python:
Table des matières
- Créer une classe simple en python
- Utilisez la fonction init () pour attribuer des valeurs
- Ajouter un paramètre facultatif dans l'initialisation de la classe à l'aide de * args
- Ajouter des paramètres facultatifs dans l'initialisation de la classe à l'aide de ** kwargs
- Ajouter des méthodes
- Supprimer un objet
- Créer une classe enfant (Inheritance)
- Références
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