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 :

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

Prochaines Étapes

That's all folks