Initial commit
This commit is contained in:
115
source/07-objects/inheritance/aggregation.py
Normal file
115
source/07-objects/inheritance/aggregation.py
Normal file
@ -0,0 +1,115 @@
|
||||
from typing import List, Set
|
||||
|
||||
|
||||
class User(object):
|
||||
"""
|
||||
Classe représentant un utilisateur.
|
||||
|
||||
"""
|
||||
name: str = None
|
||||
first_name: str = None
|
||||
email: str = None
|
||||
password: str = None
|
||||
|
||||
def __init__(self, name, first_name, email, password):
|
||||
"""
|
||||
Initialiser un nouvel utilisateur.
|
||||
|
||||
Args:
|
||||
name: nom
|
||||
first_name: prénom
|
||||
email: email
|
||||
password: mot de passe
|
||||
|
||||
"""
|
||||
self.name = name
|
||||
self.first_name = first_name
|
||||
self.email = email
|
||||
self.password = password
|
||||
|
||||
def __repr__(self):
|
||||
"""
|
||||
Texte affiché pour l'objet quand on le passe dans `print()` ou surtout
|
||||
que sa représentation textuelle est demandée.
|
||||
|
||||
Returns:
|
||||
Le nom de l'utilisateur.
|
||||
|
||||
"""
|
||||
return self.name
|
||||
|
||||
|
||||
class Group(object):
|
||||
"""
|
||||
Classe de groupe d'utilisateurs.
|
||||
|
||||
"""
|
||||
name: str = None
|
||||
description: str = None
|
||||
# Ici on a un attribut qui est une liste d'objets d'une autre classe.
|
||||
# C'est ce qu'on appelle l'agrégation.
|
||||
# Si on supprime le groupe, les objets utilisateurs existent toujours indépendamment,
|
||||
# on a ici simplement un lien vers des utilisateurs.
|
||||
users: Set[User] = None
|
||||
|
||||
def __init__(self, name, description=None):
|
||||
"""
|
||||
Initialiser un nouveau groupe d'utilisateurs.
|
||||
|
||||
Args:
|
||||
name: nom du groupe
|
||||
description: texte descriptif, facultatif
|
||||
|
||||
"""
|
||||
self.name = name
|
||||
self.description = description
|
||||
|
||||
def __repr__(self):
|
||||
"""
|
||||
Texte affiché pour l'objet quand on le passe dans `print()`
|
||||
|
||||
Returns:
|
||||
Le nom du groupe.
|
||||
|
||||
"""
|
||||
return self.name
|
||||
|
||||
def add_user(self, user: User):
|
||||
"""
|
||||
Ajouter un utilisateur au groupe.
|
||||
|
||||
Args:
|
||||
user: instance d'utilisateur à ajouter
|
||||
|
||||
"""
|
||||
self.users = self.users or set()
|
||||
self.users.add(user)
|
||||
|
||||
def get_users(self):
|
||||
"""
|
||||
Renvoie la liste des utilisateurs dans le groupe.
|
||||
|
||||
Returns:
|
||||
La liste des utilisateurs ajoutés au groupe.
|
||||
|
||||
"""
|
||||
return self.users
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Créer quelques utilisateurs
|
||||
user1 = User("Martin", "Jacques", "jmartin@example.com", "jmartin")
|
||||
user2 = User("Carletti", "Audrey", "acarletti@example.com", "acarletti")
|
||||
user3 = User("Richard", "Luc", "lrichard@example.com", "lrichard")
|
||||
user4 = User("Havel", "Vaclav", "vhavel@example.com", "vhavel")
|
||||
# Créer un groupe ou deux
|
||||
group1 = Group("Amicale des amateurs de froid")
|
||||
group2 = Group("Amicale des amateurs de chaud")
|
||||
# Ajouter des utilisateurs aux groupes
|
||||
group1.add_user(user1)
|
||||
group1.add_user(user2)
|
||||
group1.add_user(user3)
|
||||
group2.add_user(user4)
|
||||
# Afficher les utilisateurs pour chaque groupe
|
||||
print(f"Utilisateurs du groupe {group1.name} : {group1.get_users()}")
|
||||
print(f"Utilisateurs du groupe {group2.name} : {group2.get_users()}")
|
Reference in New Issue
Block a user