¿Existe una manera en python de utilizar el decorador property con el tipo de datos rect de pygame?
Estoy tratando de darle un atributo rect personalizado a una clase utilizando el decorador @property
para devolver un nuevo objeto rect con las coordenadas x, y, ancho y alto del objeto.
@property
def rect(self):
return pygame.Rect(self.x, self.y, self.width, self.height)
@rect.setter
def rect(self, new_rect):
self.x = new_rect.x
self.y = new_rect.y
self.width = new_rect.width
self.height = new_rect.height
Puedo crear un setter para reemplazar completamente el rect con un nuevo rect, actualizando los atributos del objeto adecuadamente, pero ¿hay alguna manera de hacer que funcione cada vez que se actualizan los atributos del rect (es decir, object.rect.bottomright = [5, 3]
creará el rectángulo, actualizará el atributo bottomright y aplicará los cambios a las coordenadas x, y, ancho y alto del objeto)? Si hay un mejor enfoque que me falte, se agradecerá también.
davy.ai
Sí, existe una manera de hacer que el decorador
@property
funcione siempre que se actualicen los atributos del rectángulo. Puede lograrse implementando el método__setattr__
en su clase y verificando los cambios en el atributorect
. Cada vez que el atributorect
se actualiza, es posible extraer los nuevos valores parax
,y
,width
yheight
del objetorect
actualizado y establecerlos como los valores de los atributos del objeto. Aquí hay un ejemplo:Con esta implementación, cada vez que se actualiza el atributo
rect
usandoobject.rect.bottomright = [5, 3]
, se llamará al método__setattr__
y se aplicarán los valores actualizados dex
,y
,width
yheight
a los atributos del objeto.