Update: на основе кода вы публикуемую сейчас, это нельзя назвать 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()
работает одинаково в обоих классах.
Давление, которое является общим вопросом программирования, а не специфичным для Python. Вы должны прочитать о классах и наследовании в некотором тексте по объектно-ориентированному программированию. – Genba
123, см. Мой отредактированный ответ ниже. Поскольку здесь для «MobileObject» не существует определения 'is_ownable', вы не можете этого сделать:' mo = MobileObject(); mo.is_ownable() '. Результатом будет ошибка. Мой ответ показывает, как делать то, что вы описываете. – senderle