Обновление : Исходя из кода, который вы опубликовали сейчас, невозможно набрать is_ownable
для MobileObject
, поскольку MobileObject
не имеет определения для is_ownable
.
Если это так, тогда разница - это просто разница между определением MobileObject
и определением OwnableObject
. Я обновил условия ниже, чтобы проиллюстрировать, что я имею в виду.
Если вы создаете класс на Python (или на любом другом языке):
class MobileObject(object):
def __init__(self, position):
self.position = position
def move(self, position):
self.position = position
def is_ownable(self):
return False
А затем создать подкласс:
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
Полученный подкласс автоматически наследует методы своего суперкласса:
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
Как видите, is_ownable()
и is_owned()
отличаются между двумя классами - и в последнем случае, поскольку is_owned()
не определено, это вызывает ошибку при вызове на movable
. Но move()
работает одинаково в обоих классах.