Les Attributs d'Objets en Python
Types d'Attributs
En Python, il existe différents types d'attributs qui peuvent être associés à un objet :
- Attributs d'instance
- Attributs de classe
- Propriétés
1. Attributs d'Instance
Les attributs d'instance sont uniques à chaque instance de la classe
.
class Person:
def __init__(self, name, age):
self.name = name # Instance attribute
self.age = age # Instance attribute
# Creating two instances
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)
print(person1.name) # Alice
print(person2.name) # Bob
2. Attributs de Classe
Les attributs de classe
sont partagés par toutes les instances de la classe
.
class Counter:
instance_count = 0 # Class attribute
def __init__(self):
Counter.instance_count += 1
# Creating instances
c1 = Counter()
c2 = Counter()
print(Counter.instance_count) # 2
print(c1.instance_count) # 2
print(c2.instance_count) # 2
3. Propriétés
Les propriétés
permettent de contrôler l'accès aux attributs avec des getters
et setters
.
class Temperature:
def __init__(self):
self._celsius = 0
@property
def celsius(self):
return self._celsius
@celsius.setter
def celsius(self, value):
if value < -273.15:
raise ValueError("Temperature cannot be below absolute zero")
self._celsius = value
@property
def fahrenheit(self):
return (self.celsius * 9/5) + 32
# Using properties
temp = Temperature()
temp.celsius = 25
print(f"{temp.celsius}°C = {temp.fahrenheit}°F")
Gestion des Attributs
1. Vérification d'Existence
Python offre plusieurs façons de vérifier l'existence d'attributs.
# Vérification avec hasattr()
if hasattr(personne1, 'nom'):
print("L'attribut 'nom' existe")
# Vérification avec getattr()
age = getattr(personne1, 'age', None) # None si l'attribut n'existe pas
2. Attributs Privés
En Python, on peut créer des attributs "privés" en utilisant le préfixe double underscore
.
class BankAccount:
def __init__(self):
self.__balance = 0 # Private attribute
def deposit(self, amount):
if amount > 0:
self.__balance += amount
def get_balance(self):
return self.__balance
account = BankAccount()
account.deposit(100)
print(account.get_balance()) # 100
# print(account.__balance) # Error!
Points Clés à Retenir
- Les attributs d'instance sont uniques à chaque objet
- Les attributs de classe sont partagés entre toutes les instances
- Les propriétés permettent un contrôle fin de l'accès aux attributs
- Les attributs privés offrent une encapsulation des données
Prochaines Étapes
- Méthodes d'objets
- Héritage et polymorphisme
- Méthodes spéciales et protocoles
That's all folks