Classes et objets en Python
1. Objet orienté en Python
Python est un langage de programmation orienté vers la procédure (Procedural-oriented) et c'est aussi un langage de programmation orienté objet (Object Oriented).
L'orientée procédurale (procedural- oriented)
L'expression « orientée procédurale» (Procedural-oriented) s'exprime en utilisant des fonctions dans Python. Vous pouvez définir des fonctions et ces fonctions peuvent être utilisées dans d'autres modules du programme Python.
Programmation Orientée Objet (Object Oriented)
Orientée Objet dans Python s'exprime en utilisant la classe, vous pouvez définir une classe (class), class est un prototype de la création des objets.
2. Créer une classe en Python
La syntaxe pour créer une classe :
** class syntax **
class ClassName:
'Brief description of the class (Optional)'
# Code ...
- Pour définir une classe, utilisez le mot-clé class, suivi du nom de la classe et un signe deux-points ( : ). La première ligne du corps de classe est une chaîne qui décrit brièvement de cette classe (pas obligatoire). vous pouvez accéder à cette chaîne via ClassName.__ doc__
- Dans le corps de classe, vous pouvez déclarer des attributs, des méthodes et des constructeurs.
Attribut (Attribute) :
L'attribut est un membre de la classe. Par exemple, le rectangle comporte deux attributs dont la largeur (width) et la hauteur (height).
Méthodes (Method) :
- La méthode de la classe est similaire à une fonction normale, mais elle est une fonction de la classe, pour l'utiliser, vous devez appeler à travers l'objet.
- Le premier paramètre de la méthode est toujours self (un mot-clé qui fait référence à la classe elle-même).
La méthode constructeur (Constructor):
- Le constructeur (constructor) est une méthode spéciale de classe, elle est toujours nommé __init__
- Le premier paramètre du constructeur est toujours self (un mot-clé se réfère à la classe elle-même).
- Le constructeur est utilisé pour créer un objet.
- Le constructeur attribue des valeurs du paramètre aux propriétés de l'objet qui sera créé.
- Vous ne pouvez définir qu'un plus constructeur en classe.
- Si la classe n'est pas définie par le constructeur, par défaut Python considère qu'il a un constructeur par défaut __init __ (self), avec le corps vide, il hérite le constructeur de la classe parente.
rectangle.py
# Une classe de simulation d'un rectangle.
class Rectangle :
'This is Rectangle class'
# Une méthode utilisée pour créer l'objet (Contructor).
def __init__(self, width, height):
self.width= width
self.height = height
def getWidth(self):
return self.width
def getHeight(self):
return self.height
# Méthode pour calculer la superficie.
def getArea(self):
return self.width * self.height
Créez l'objet de la classe Rectangle :
testRectangle.py
from rectangle import Rectangle
# Créez deux objets : r1 et r2
r1 = Rectangle(10,5)
r2 = Rectangle(20,11)
print ("r1.width = ", r1.width)
print ("r1.height = ", r1.height)
print ("r1.getWidth() = ", r1.getWidth())
print ("r1.getArea() = ", r1.getArea())
print ("-----------------")
print ("r2.width = ", r2.width)
print ("r2.height = ", r2.height)
print ("r2.getWidth() = ", r2.getWidth())
print ("r2.getArea() = ", r2.getArea())
Qu'est-ce qui se passe lorsque vous créez un objet d'une classe?
Lorsque vous créez un objet de la classe Rectangle, le constructeur de cette classe sera appelée pour créer un objet et les attributs de l'objet seront attribués la valeur du paramètre. Il est similaire à l'illustration ci-dessous :
3. Constructeur avec des paramètres par défaut
Contrairement à d'autres langues, la classe de Python n'a qu'un seul constructeur. Cependant, Python permet au paramètre de prendre une valeur par défaut.
Remarque : Tous les paramètres requis doivent précéder tous les paramètres qui ont des valeurs par défaut.
person.py
class Person :
# Les paramètres d'âge (age) et de gendre (gender) ont une valeur par défaut.
def __init__ (self, name, age = 1, gender = "Male" ):
self.name = name
self.age = age
self.gender= gender
def showInfo(self):
print ("Name: ", self.name)
print ("Age: ", self.age)
print ("Gender: ", self.gender)
Par exemple :
testPerson.py
from person import Person
# Créez un objet de Person.
aimee = Person("Aimee", 21, "Female")
aimee.showInfo()
print (" --------------- ")
# age, gender par défaut.
alice = Person( "Alice" )
alice.showInfo()
print (" --------------- ")
# gender par défaut.
tran = Person("Tran", 37)
tran.showInfo()
4. Comparer des objects
Dans Python, lorsque vous créez un objet via Constructor (constructeur), il y aura une véritable entité créée se trouvent sur la mémoire, il y a une adresse précise.
Un opérateur assigné à un objet AA par un objet BB ne crée pas une nouvelle entité sur la mémoire, il s'agit simplement d'indiquer l'adresse de AA à l'adresse de BB.
Un opérateur assigné à un objet AA par un objet BB ne crée pas une nouvelle entité sur la mémoire, il s'agit simplement d'indiquer l'adresse de AA à l'adresse de BB.
L'opérateur == utilisé pour comparer deux objets qui indiquent qu'il retourne True si les deux objets se réfèrent à la même adresse en mémoire. Les opérateurs != est utilisé pour comparer les deux adresses de deux objets qui indiquent qu'il renvoie True si les deux objets pointent vers deux adresses différentes.
compareObject.py
from rectangle import Rectangle
r1 = Rectangle(20, 10)
r2 = Rectangle(20 , 10)
r3 = r1
# Comparez l'adresse de r1 et r2
test1 = r1 == r2 # --> False
# Comparez l'adresse de r1 et r2
test2 = r1 == r3 # --> True
print ("r1 == r2 ? ", test1)
print ("r1 == r3 ? ", test2)
print (" -------------- ")
print ("r1 != r2 ? ", r1 != r2)
print ("r1 != r3 ? ", r1 != r3)
5. Attributs
Dans Python, il y a deux concepts similaires dont vous devez les distinguer :
- Attribut
- Variable de la classe
Pour simplifier cela, analysez l'exemple ci-dessous :
player.py
class Player:
# Variable de la classe
minAge = 18
maxAge = 50
def __init__(self, name, age):
self.name = name
self.age = age
Attribut
Des objets créés à partir d'une classe seront situés à différentes adresses sur la mémoire et leurs attributs "même nom" ont également différentes adresses sur la mémoire. Par exemple :
testAttributePlayer.py
from player import Player
player1 = Player("Tom", 20)
player2 = Player("Jerry", 20)
print ("player1.name = ", player1.name)
print ("player1.age = ", player1.age)
print ("player2.name = ", player2.name)
print ("player2.age = ", player2.age)
print (" ------------ ")
print ("Assign new value to player1.age = 21 ")
# Assignez une nouvelle valeur à l'attribut age de player1.
player1.age = 21
print ("player1.name = ", player1.name)
print ("player1.age = ", player1.age)
print ("player2.name = ", player2.name)
print ("player2.age = ", player2.age)
Python vous permet de créer un nouvel attribut pour un objet préexistant. Par exemple, l'objet player1 et le nouvel attribut sont nommés comme address.
testNewAttributePlayer.py
from player import Player
player1 = Player("Tom", 20)
player2 = Player("Jerry", 20)
# Créez un nouvel attribut nommé 'adresse' pour player1.
player1.address = "USA"
print ("player1.name = ", player1.name)
print ("player1.age = ", player1.age)
print ("player1.address = ", player1.address)
print (" ------------------- ")
print ("player2.name = ", player2.name)
print ("player2.age = ", player2.age)
# player2 n'a pas d'attribut "adresse"(l'erreur qui se passe ici).
print ("player2.address = ", player2.address)
6. Des fonctions d'accès Attributs
Normalement, vous pouvez accéder à l'attribut d'un objet via l'opérateur "point" (par exemple, player1.name). Cependant, Python vous permet d'accéder à cela via la fonction (function).
Fonction | Description |
getattr(obj, name[, default]) | Renvoie la valeur de l'attribut ou renvoie la valeur par défaut si l'objet n'a pas cet attribut. |
hasattr(obj,name) | Vérifie si cet objet a un attribut donné par le paramètre 'name' ou non. |
setattr(obj,name,value) | Définit la valeur à attribuer. Si l'attribut n'existe pas, il sera créé. |
delattr(obj, name) | Supprime l'attribut. |
testAttFunctions.py
from player import Player
player1 = Player("Tom", 20)
# getattr(obj, name[, default])
print ("getattr(player1,'name') = " , getattr(player1,"name") )
print ("setattr(player1,'age', 21): ")
# setattr(obj,name,value)
setattr(player1,"age", 21)
print ("player1.age = ", player1.age)
# Vérifier si player1 a un attribut (attribut)"adresse"?
hasAddress = hasattr(player1, "address")
print ("hasattr(player1, 'address') ? ", hasAddress)
# Créer l'attribut 'adress' pour l'objet de 'player1'.
print ("Create attribute 'address' for object 'player1'")
setattr(player1, 'address', "USA")
print ("player1.address = ", player1.address)
# Supprimer l'attribut "address".
delattr(player1, "address")
7. Les attributs disponible de la classe
Des classes Python sont les descendants de la classe objet donc elles héritent les attributs suivants :
Attribut | Description |
__dict__ | Informations sur cette classe est représentée concise facile à comprendre, comme un dictionnaire.
|
__doc__ | Renvoie une chaîne description de la classe, ou renvoie None si elle n'est pas définie |
__class__ | Renvoie un objet qui contient des informations de la classe, cet objet possède de nombreuses propriétés utiles, y compris l'attribut _name _. |
__module__ | Renvoie le nom de la classe 'module', ou renvoie "__main__" si cette classe est définie dans le module est en cours d'exécution. |
testBuildInAttributes.py
class Customer :
'This is Customer class'
def __init__(self, name, phone, address):
self.name = name
self.phone = phone
self.address = address
john = Customer("John",1234567, "USA")
print ("john.__dict__ = ", john.__dict__)
print ("john.__doc__ = ", john.__doc__)
print ("john.__class__ = ", john.__class__)
print ("john.__class__.__name__ = ", john.__class__.__name__)
print ("john.__module__ = ", john.__module__)
8. Les variables de la classe
En Python, le concept variable de la classe (Class's Variable) est équivalent au concept de champ statique (Static Field) d'autres langues telles que Java, CSharp. Les variables de la classe peuvent être consultées via le nom de la classe ou via l'objet.
Le conseil ici est que vous devez accéder à "Variable de la classe" via le nom de la classe au lieu de l'objet. Cela vous permet d'éviter toutes les confusions entre "Variable de la classe" et l'attribut.
Chaque variable de la classe possède une adresse sur la mémoire et il est partagé avec tous les objets de classe.
testVariablePlayer.py
from player import Player
player1 = Player("Tom", 20)
player2 = Player("Jerry", 20)
# Accéder via le nom de la classe.
print ("Player.minAge = ", Player.minAge)
# Accéder via l'object.
print ("player1.minAge = ", player1.minAge)
print ("player2.minAge = ", player2.minAge)
print (" ------------ ")
print ("Assign new value to minAge via class name, and print..")
# Assigner une nouvelle valeur à minAge via le nom de la classe.
Player.minAge = 19
print ("Player.minAge = ", Player.minAge)
print ("player1.minAge = ", player1.minAge)
print ("player2.minAge = ", player2.minAge)
9. Liste des membres d'une classe ou d'un objet
Python vous fournit la fonction dir, cette fonction montre une liste les méthodes, les propriétés, les variables de classe ou de l'objet.
testDirFunction.py
from player import Player
# Imprimer la liste des attributs, les méthodes et les variables de la classe 'Player'
print ( dir(Player) )
print ("\n\n")
player1 = Player("Tom", 20)
player1.address ="USA"
# Imprimer la liste des attributs, les méthodes et les variables de la classe 'player1'
print ( dir(player1) )
Exécutez l'exemple :
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'maxAge', 'minAge']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'address', 'age', 'maxAge', 'minAge', 'name']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'address', 'age', 'maxAge', 'minAge', 'name']
Tutoriels de programmation Python
- Rechercher de la documentation Python
- Instructions de branchement en Python
- Le Tutoriel de Python Function
- Classes et objets en Python
- Héritage et polymorphisme en Python
- Le Tutoriel de Python Dictionary
- Le Tutoriel de Python Lists
- Le Tutoriel de Python Tuples
- Le Tutoriel de Python Date Time
- Connectez-vous à la base de données MySQL en Python en utilisant PyMySQL
- Le Tutoriel de gestion des exceptions Python
- Le Tutoriel de Python String
- Introduction à Python
- Installer Python sur Windows
- Installer Python sur Ubuntu
- Installer PyDev pour Eclipse
- Conventions et versions grammaticales en Python
- Tutoriel Python pour débutant
- Les Boucles en Python
Show More