287 votes

Méthodes abstraites en Python

J'ai des difficultés à utiliser l'héritage avec Python. Alors que le concept me semble trop facile en Java, jusqu'à présent je n'ai pas réussi à le comprendre en Python, ce qui est surprenant, du moins pour moi.

J'ai un prototype qui suit :

class Shape():
   def __init__(self, shape_name):
       self.shape = shape_name

class Rectangle(Shape):
   def __init__(self, name):
       self.shape = name

Dans le code ci-dessus, comment puis-je créer une méthode abstraite qui devra être implémentée pour toutes les sous-classes ?

6 votes

Les interfaces abstraites et autres n'ont été introduites que récemment. Puisque python n'est pas compilé, vous devriez préciser votre intention dans la documentation plutôt que dans les classes abstraites.

0 votes

Également un très une bonne application pour les tests unitaires. Comme Python n'est pas compilé, je ne commence pas à faire confiance à un code avant de l'avoir testé à l'unité.

7voto

leo adams Points 22

Vous pouvez utiliser six et abc pour construire efficacement une classe pour python2 et python3 comme suit :

import six
import abc

@six.add_metaclass(abc.ABCMeta)
class MyClass(object):
    """
    documentation
    """

    @abc.abstractmethod
    def initialize(self, para=None):
        """
        documentation
        """
        raise NotImplementedError

C'est un document impressionnant à ce sujet.

2voto

joaquin Points 22450

Vous devez implémenter une classe de base abstraite (ABC).

Vérifier la documentation python

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