Classes et objets en Python

View more categories:

1- Orienté d'objet en Python

Python est un langage de programmation orienté vers la procédure (procédure orientée) et c'est aussi un langage de programmation orienté objet.
Orienté à la procédure (procédure orientée)
L'expression « orientée vers la procédure» 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.
Orienté vers l'objet (Object Oriented)
"Object-oriented" dans Python s'exprime en utilisant la classe, vous pouvez définir une classe, la classe est un prototype (prototype) pour créer des objets ( object/instance).

2- Créer dans 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é de la classe, 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 les attributs, les méthodes (méthode) et les constructeurs (Constructeur).

Attribut( Attribute):
L'attribut est un membre de la classe. Par exemple, le rectangle comporte deux attributs dont la largeur et la hauteur (largeur et la hauteur).
Méthodes (Méthode):
  • La méthode de la classe est similaire à une fonction normale, mais elle est fonction de la classe, pour l'utiliser, vous devez appeler à travers l'objet.
  • Le premier paramètre de la méthode est toujours autonome (un mot-clé qui fait référence à la classe elle-même).
 La méthode constructeur(Constructeur):
  • Le constructeur (constructeur) est une méthode spéciale de classe (classe), il est toujours nommé __init__
  • Le premier paramètre du constructeur est toujours autonome (un mot-clé se réfère à la classe elle-même).
  • Constructeur est utilisé pour créer un objet.
  • Constructeur attribue les 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.
 
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 à créer un objet et les attributs de l'objet recevront la valeur du paramètre. Il est similaire à l'illustration ci-dessous

3- Constructor avec paramètres par défaut

Contrairement à d'autres langues, la classe de Python n'a que le plus un seul constructeur. Cependant, Python permet au paramètre d'avoir une valeur par défaut.
Remarque: Tous les paramètres requis (paramètres requis) doivent précéder tous les paramètres ont des valeurs par défaut.
person.py
class Person :
  
    # Les paramètres d'âge et de 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éer 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 les 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 .
 
Opérateur == utilisé pour comparer deux objets qui indiquent, 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, 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

# Comparer l'adresse de  r1 et r2
test1 = r1 == r2 # --> False

# Comparer l'adresse de  r1 et r3
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 (Attribute)

Dans Python, il existe deux concepts similaires dont vous devez les distinguer :
 
  1. Attribut (Attribut)
  2.  Variable de la classe 
     
Pour simplifier cela, analysez l'exemple ci-dessous:

player.py
class Player:
    
    # Variable de Classe
    minAge  = 18
    
    maxAge = 50
    
    
    def __init__(self, name, age):
        
        self.name = name
        self.age = age
Attribut (Attribut)
Les 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 ci-dessous:
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 ")

# Gán gAffectez une nouvelle valeur à l'attribut (attribute) 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 nommé comme adresse.
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- Les fonctions d'accès Attributs

Normalement, vous accédez à 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 (fonction).
Function 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érifiez cet objet a un attribut donné par le paramètre 'nom' ou non.
setattr(obj,name,value) Définir la valeur à attribuer. Si l'attribut n'existe pas, il sera créé.
delattr(obj, name) Supprimer 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 player1 a un attribut (attribut)"adresse"?
hasAddress =  hasattr(player1, "address")

print ("hasattr(player1, 'address') ? ", hasAddress)

# Cr é er l'attribut 'adresse' pour l'objet de 'player1'.
print ("Create attribute 'address' for object 'player1'")
setattr(player1, 'address', "USA")

print ("player1.address = ", player1.address)

# Supprimez l'adresse "adresse" de l'attribut.
delattr(player1, "address")

7- Les attributs de la classe disponible

Les classes  Python sont les descendants de l'objet de classe. Et il hérite des attributs suivants:
Attribut Description
__dict__ Informations sur cette classe est représentée concise facile à comprendre, comme un dictionnaire (Dictionary)
 
__doc__ Retourne une description de chaîne de la classe, ou retourne Aucun si elle n'est pas définie 
__class__ Retourne un objet qui contient des informations sur la classe, cet objet possède de nombreuses propriétés utiles, y compris les propriétés _nom _.
__module__ Retourne le nom du module de classe, ou le retour « __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- Variable de Classe

Dans Python, le concept Variable de la classe 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 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 permet contribue à éviter toute confusion entre "Variable de la classe" et l'attribut.
Chaque variable de la classe possède une adresse sur la mémoire (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ès via le nom de la classe.
print ("Player.minAge = ", Player.minAge)

# Accès 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..")

# Affectez une nouvelle valeur à imAge par 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 énumère une liste des méthodes, propriétés, variables de classe ou de l'objet. 
testDirFunction.py
from player import Player

# Imprimer la liste des attributs, des méthodes et des variables de la classe 'Player'
print ( dir(Player) )


print ("\n\n")

player1 = Player("Tom", 20)

player1.address ="USA"

# Imprimer la liste des attributs, des méthodes et des variables de la classe 'Player1'
print ( dir(player1) )
Exécution d'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']

 

10- Supprimer l'objet

  • TODO

View more categories: