#python #pygame
Вопрос:
Я пытаюсь придать пользовательскому классу атрибут rect, используя @property
декоратор для возврата нового объекта rect с x, y, шириной и высотой объекта.
@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
Я могу сделать сеттер полностью заменить прямоугольник с нового прямоугольника, обновление объекта атрибутами должным образом, но есть ли способ, чтобы заставить его работать, когда атрибуты прямоугольник обновляются (т. е. object.rect.bottomright = [5, 3]
создадим прямоугольник, обновить атрибут нижнем и применить изменения к объекту X и y, ширина и высота)? Если мне не хватает лучшего подхода, я бы тоже был признателен.
Комментарии:
1. Нет, если только вы не вернете какую-то оболочку из
object.rect
этого прокси-сервера для любых взаимодействий обратно вobject
.2. Почему ты хочешь это сделать? Что не так с
rect
атрибутом?3. Почему вы храните x, y, ширину и высоту отдельно? Вы могли бы просто иметь атрибут rect для своего объекта и изменять его, как обычно.
4. Спасибо, я избегал
rect
, чтобы атрибут содержалx
,y
,width
иheight
потому что я не хотел иметь доступ кrect
атрибуту в любое время, когда я хотел получить доступ к одному из этих общих атрибутов, но я понял, что могу простоpygame.Rect
подклассировать класс, чтобы получить этот эффект со всеми результирующими атрибутами.