Bonjour,
Il arrive en Python orienté objet de créer des classes uniquement pour factoriser le code. Par exemple, une rampe est un objet dont on peut modifier la longueur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class AbstractRamp: """An interface shared by all ramps.""" def lengthen(self): self.move(**self.len_args) def set_len(self, l): dist = l - len(self) if dist < 0: move = self.shorten elif dist > 0: move = self.lengthen else: return while 0 <= len(self) <= self.max_len and abs(len(self) - l) > self.accuracy: move() def shorten(self): self.move(**self.short_args) |
Une telle classe n'est jamais instanciée directement, seulement héritée. Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class BasicRamp(AbstractRamp): """A basic ramp with an angle sensor and two solenoid valves.""" def __init__(self, max_len, angle_input, len_args, short_args, accuracy): self.max_len = max_len self.len_args = len_args self.short_args = short_args self.angle_input = angle_input self.accuracy = accuracy AbstractRamp.__init__(self) def __len__(self): angle = self.get_angle() # Méthode à définir dans une classe fille return angle/360.0 * self.max_len def move(self, output, delay): self.pulse(output) # Méthode à définir dans une classe fille self.delay(delay) # Méthode à définir dans une classe fille |
La question est : faut-il définir dans la classe abstraite les méthodes et arguments à spécifier dans les classes filles (ici, move
, __len__
, accuracy
, etc.), quitte à mettre des pass
dans les méthodes et des valeurs bidons pour les arguments ?
Merci.
+0
-0