Résolue

Différence entre méthode de classe et méthode normale

# Orienté objet # Python # Classes

J'ai un peu de mal à voir l'interêt des méthodes de classe.

Dans le code ci-dessous, ma méthode fiat() n'est pas une méthode de classe à proprement parlé vu que je n'ai pas mis le décorateur. Mais pourtant elle fait la même chose que les méthodes mercedes ou porsche non ?

class Voiture:

    def __init__(self, marque, vitesse, prix):
        self.marque = marque
        self.vitesse = vitesse
        self.prix = prix

    @classmethod
    def porsche(cls):
        return cls("Porsche", 200, 10)

    @classmethod
    def mercedes(cls):
        return cls("Mercedes", 150, 20)

    def fiat():
        return Voiture("Fiat", 100, 2)

Du coup j'ai du mal à quoi ça sert de faire une méthode de class en utilisant le décorateur et en lui passant cls en paramètre alors que je peux faire la même chose sans.

Gabriel Trouvé

Mentor

Salut :)

Oui ... intéressant !

Mais dans ta méthode fiat, tu retourne de manière statique une instance de la classe Voiture. En cas d'héritage ça risque de devenir embêtant.

Test ce bout de code :

class Voiture:
    def __init__(self, marque, vitesse, prix):
        self.marque = marque
        self.vitesse = vitesse
        self.prix = prix

    @classmethod
    def porsche(cls):
        return cls("Porsche", 200, 10)

    def fiat():
        return Voiture("Fiat", 100, 2)


class VoitureHeritage(Voiture):
    def __init__(self, marque, vitesse, prix, couleur):
        super().__init__(marque, vitesse, prix)
        self.couleur = couleur

    @classmethod
    def peugeot(cls):
        return cls("Peugeot", 220, 30, "bleu")


print(type(VoitureHeritage.peugeot()))
print(type(VoitureHeritage.fiat()))

Du coup fiat est toujours liée à Voiture. Niveau maintenabilité du code ça peut vite devenir le bazar.

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.