161 votes

Attributs abstraits en Python

Quelle est la manière la plus courte /la plus élégante d'implémenter le code Scala suivant avec un attribut abstrait en Python ?

abstract class Controller {

    val path: String

}

Une sous-classe de Controller est imposée pour définir le "chemin" par le compilateur Scala. Une sous-classe ressemblerait à ceci :

class MyController extends Controller {

    override val path = "/home"

}

84voto

drhagen Points 2762

Dans Python 3.6+, vous pouvez annoter un attribut d'une classe abstraite (ou toute variable) sans fournir de valeur pour cet attribut.

from abc import ABC

class Controller(ABC):
    path: str

class MyController(Controller):
    path = "/home"

Il en résulte un code très propre où il est évident que l'attribut est abstrait. Le code qui tente d'accéder à l'attribut lorsque if n'a pas été écrasé va générer un AttributeError.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X