Итак, я пишу код и недавно столкнулся с необходимостью реализовать несколько миксинов. У меня вопрос: как правильно разработать микс? Я воспользуюсь приведенным ниже примером кода, чтобы проиллюстрировать свой точный запрос.
class Projectile(Movable, Rotatable, Bounded):
'''A projectile.'''
def __init__(self, bounds, position=(0, 0), heading=0.0):
Movable.__init__(self)
Rotatable.__init__(self, heading)
Bounded.__init__(self, bounds)
self.position = Vector(position)
def update(self, dt=1.0):
'''Update the state of the object.'''
scalar = self.velocity
heading = math.radians(self.heading)
direction = Vector([math.sin(heading), math.cos(heading)])
self.position += scalar * dt * direction
Bounded.update(self)
class Bounded(object):
'''A mix-in for bounded objects.'''
def __init__(self, bounds):
self.bounds = bounds
def update(self):
if not self.bounds.contains(self.rect):
while self.rect.top > self.bounds.top:
self.rect.centery += 1
while self.rect.bottom < self.bounds.bottom:
self.rect.centery += 1
while self.rect.left < self.bounds.left:
self.rect.centerx += 1
while self.rect.right > self.bounds.right:
self.rect.centerx -= 1
В основном, мне интересно, это какие-то примеси вроде интерфейсов Java, где есть своего рода (в случае Python неявный) контракт, который при желании чтобы использовать код, нужно определить определенные переменные / функции (в отличие от фреймворка), или это больше похоже на код, который я написал выше, где каждое добавление должно быть инициализировано явно?