Mise à jour: Basé sur le code que vous avez posté maintenant, il est impossible d'appeler is_ownable
sur un MobileObject
parce que le MobileObject
ne semble pas avoir de définition pour is_ownable
. Dans ce cas, la différence est simplement la différence entre la définition de MobileObject
et la définition de OwnableObject
. J'ai mis à jour les termes de ce qui suit pour illustrer ce que je veux dire.
Si vous créez une classe en Python (ou dans toutes les langues, vraiment):
class MobileObject(object):
def __init__(self, position):
self.position = position
def move(self, position):
self.position = position
def is_ownable(self):
return False
Et puis créer une sous-classe:
class OwnableObject(MobileObject):
def __init__(self, position, owner=None):
MobileObject.__init__(self, position)
self.owner = owner
def is_ownable(self):
return True
def is_owned(self):
return self.owner
La sous-classe résultant hérite automatiquement des méthodes de sa superclasse :
movable = MobileObject()
movable.is_ownable() # returns False
movable.move(new_position) # moves movable
movable.is_owned() # causes an error
ownable = OwnableObject()
ownable.is_ownable() # returns True
ownable.move(new_position) # moves ownable
movable.is_owned() # returns owner or None
Comme vous pouvez le voir, et is_ownable()
is_owned()
diffère entre les deux classes - et dans le dernier cas, puisque is_owned()
n'est pas défini, il provoque une erreur lorsqu'il est appelé movable
. Mais move()
fonctionne de manière identique dans les deux classes.
Je pressume c'est une question de programmation générale, pas spécifique à Python. Vous devriez lire sur les classes et l'héritage dans un texte sur la programmation orientée objet. – Genba
123, voir ma réponse éditée ci-dessous. Comme il ne semble pas y avoir de définition de 'is_ownable' pour' MobileObject', vous ne pouvez pas faire ceci: 'mo = MobileObject(); mo.is_ownable() '. Le résultat serait une erreur. Ma réponse montre comment faire ce que vous décrivez. – senderle