Je connais les méthodes virtuelles de PHP ou Java.
Comment peuvent-ils être implémentés en Python ?
Ou dois-je définir une méthode vide dans une classe abstraite et la remplacer ?
Je connais les méthodes virtuelles de PHP ou Java.
Comment peuvent-ils être implémentés en Python ?
Ou dois-je définir une méthode vide dans une classe abstraite et la remplacer ?
En fait, dans la version 2.6 python fournit quelque chose appelé classes de base abstraites et vous pouvez explicitement définir des méthodes virtuelles comme ceci :
from abc import ABCMeta
from abc import abstractmethod
...
class C:
__metaclass__ = ABCMeta
@abstractmethod
def my_abstract_method(self, ...):
Il fonctionne très bien, à condition que la classe n'hérite pas de classes qui utilisent déjà des métaclasses.
Les méthodes Python sont toujours virtuelles
comme Ignacio l'a dit encore En quelque sorte, l'héritage de classe peut être une meilleure approche pour implémenter ce que vous voulez.
class Animal: def __init__(self,name,legs): self.name = name self.legs = legs def getLegs(self): return "{0} has {1} legs".format(self.name, self.legs) def says(self): return "I am an unknown animal" class Dog(Animal): # <Dog inherits from Animal here (all methods as well) def says(self): # <Called instead of Animal says method return "I am a dog named {0}".format(self.name) def somethingOnlyADogCanDo(self): return "be loyal" formless = Animal("Animal", 0) rover = Dog("Rover", 4) #<calls initialization method from animal print(formless.says()) # <calls animal say method print(rover.says()) #<calls Dog says method print(rover.getLegs()) #<calls getLegs method from animal class
Les résultats doivent être :
I am an unknown animal I am a dog named Rover Rover has 4 legs
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.