Résolue

Héritage avec les dataclasses

# Héritage

Comment faire fonctionner la notion d'héritage avec les dataclasses svp ?

Thibault houdon

Mentor

Salut Foued !

Ça fonctionne de la même façon qu'avec les classes "normales" :)

Par exemple :

from dataclasses import dataclass

@dataclass
class Animal:
    name: str
    age: int

@dataclass
class Dog(Animal):
    breed: str

# Création d'une instance de Dog
dog = Dog(name="Patrick", age=5, breed="Chihuahua")

print(dog)

Dans cet exemple :

  1. Animal est une dataclass parent avec deux attributs name et age.

  2. Dog hérite de Animal et ajoute un attribut spécifique breed.

Quand tu crées une instance de Dog, tu peux lui passer tous les attributs de l'Animal parent (name et age), ainsi que les attributs spécifiques de Dog (breed).

Si tu as des méthodes spécifiques à ajouter à tes classes, tu peux aussi les définir comme dans une classe normale. Par exemple :

from dataclasses import dataclass

@dataclass
class Animal:
    name: str
    age: int

    def speak(self):
        return "I am an animal!"

@dataclass
class Dog(Animal):
    breed: str

    def speak(self):
        return "Woof woof !"

dog = Dog(name="Rex", age=5, breed="Golden Retriever")
print(dog.speak())

Comme tu peux le voir donc c'est similaire que ce qu'on retrouve dans l'orienté objet en général :)

Bonne continuation !

Thierry Chappuis

Mentor

Au final, une dataclasse n'est rien d'autre qu'une ...classe, avec quelques facilité pour nous aider dans sa construction.

Thierry

Bonjour à tous,

Je pense que le vrai terme c'est decorateur comme dit dans la video de Houdon. Car sa fonction se limite seulement à l'initialisation de la classe. La portée de la classe va au-delà.

Concernant, l'héritage, on peut préciser que la classe fille hérite de tout sauf de la méthode d'initialisation.

Parce que pour moi, avec l'héritage plus besoin d'initialiser la classe fille. Mais si on a besoin de le faire soit pour definir l'espace de nommage de la classe fille alors, on n'herite pas de tout vraiment.

Gabriel Trouvé

Mentor

Salut

Le terme "dataclass" désigne l'ensemble de la fonctionnalité, pas juste le décorateur.

Sur l'héritage :
Les dataclass génèrent automatiquement une méthode __init__ qui prend en compte à la fois les attributs de la classe parente et ceux de la classe fille.

from dataclasses import dataclass

@dataclass
class Parent:
    a: str
    b: int

@dataclass
class Enfant(Parent):
    c: float

enfant = Enfant("test", 42, 3.14)

Juste une classe ^^

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.