Ok, heres object.py (part 1): from pathlib import Path
from typing import Any, Dict, Iterable, Optional, Self
import pygame as pg

from ezsgame.styles.units import Measure

from .styles.style import Styles

from .futures.components import ComponentGroup, Component
from .global\_data import get\_id, get\_window
from .styles.styles\_resolver import resolve\_measure, resolve\_color, Color, resolve\_position, resolve\_size
from .funcs import center\_at
from .fonts import Fonts, FontFamily

from .types import Pos, Size

# Initialize vars ---------------------------------------------------------
pg.font.init()
# Objects -----------------------------------------------------------------------
class Object:
 r"""
 Object is a base class for all objects in the game.
 should not be instantiated.
 """

 \_\_slots\_\_ = ("pos", "size", "window", "id", "components", "behavior", "\_\_on\_draw", "parent")

 def \_\_init\_\_(
 self, 
 pos: Pos | Iterable[Measure],
 size: Size | Iterable[Measure],
 styles: Optional[Styles] = None,
 parent: Optional["Object"] = None,
 components: Iterable[Component] = [],
 \*\*\_styles: Dict[str, Any]
 ):
 """
 Base class for most object, handlers object default and required behavior
 """
 self.window = get\_window()
 self.id = get\_id()
 
 self.parent = parent or self.window
 
 self.styles = styles or Styles(\*\*\_styles)
 
 # resolve styles 
 self.styles.resolve(self.parent.size)
 
 self.size = resolve\_size(self, size, self.parent.size)
 self.pos = resolve\_position(self, pos, self.parent)

 # defualt behavior - needs it own type and rework
 self.behavior = {"pos": "dynamic"}

 self.\_\_on\_draw = {}

 self.components = ComponentGroup(self, \*components)
 # Calls \_\_after\_draw() before draw() to call on draw methods
 def \_draw\_manager(draw\_func):
 def wrapper():
 if self.styles.visible:
 draw\_func() 
 
 self.\_\_after\_draw()
 
 return wrapper
 try:
 self.draw = \_draw\_manager(self.draw)
 except:
 pass

 def extends(self, \*classes):
 r"""
 #### Extends the properties and methods of the given classes to the current object.
 Note : this can only be done with classes with `extend()` method.
 #### Parameters
 - `classes`: classes to extend (\*args)
 """
 for cls in classes:
 if hasattr(cls, "extend"):
 self = cls.extend(self)
 else:
 raise TypeError("Cannot extend class {}".format(cls))
 return self

 def on\_draw(self, func, name: str = "Default", pass\_object=False):
 r"""
 #### Adds a function to be called after the object is drawn
 #### Parameters
 - `func`: function to be called
 - `name`: name of the function (default: `function name`)
 - `pass\_object`: if True, the function will be called with the object as the first parameter
 """
 name = name if name else func.\_\_name\_\_
 self.\_\_on\_draw[name] = lambda: func(self) if pass\_object else func

 def remove\_on\_draw(self, name: str):
 r"""
 #### Removes a function from being called after the object is drawn
 #### Parameters
 - `name`: name of the function
 """
 if name in self.\_\_on\_draw:
 del self.\_\_on\_draw[name]

 def \_get\_collision\_box(self):
 x, y = self.pos
 w, h = self.size
 return [(x, y), (x + w, y), (x, y + h), (x + w, y + h)]

 def \_\_str\_\_(self):
 return f""

 def \_\_after\_draw(self):
 r'''
 manages Object draw method and calls `on\_draw` functions
 '''
 for func in self.\_\_on\_draw.values():
 func()
 
 
 
 def center\_at(self, parent = None, x: bool = True, y: bool = True) -> Self:
 r'''
 #### Centers an object in the parent object
 - parent : object -> parent object
 - x -> if True, center x-axis
 - y -> if True, center y-axis
 '''
 
 if not parent:
 parent = self.parent
 
 if x:
 self.pos[0] = parent.pos[0] + (parent.size[0] - self.size[0]) / 2
 if y:
 self.pos[1] = parent.pos[1] + (parent.size[1] - self.size[1]) / 2
 
 return self
k, 여기 object.py (파트 1): pathlib에서 Path를 임포트합니다.유형에서 import Any, 딕셔너리, 이터러블, 옵션, 셀프파이게임을 pg로 임포트ezsgame.styles.units에서 Measure를 가져옵니다..styles.style에서 Styles를 임포트합니다..futures.components 에서 컴포넌트 그룹, 컴포넌트를 가져옵니다..global\_data에서 get\_id, get\_window를 가져옵니다..styles.styles\_resolver에서 resolve\_measure, resolve\_color, 색상, resolve\_position, resolve\_size를 가져옵니다..funcs에서 center\_at 가져오기.fonts에서 글꼴, 글꼴 가족을 가져옵니다..types에서 위치, 크기 가져오기# 변수를 초기화 ---------------------------------------------------------pg.font.init()# Objects -----------------------------------------------------------------------클래스 Object: r""" Object는 게임 내 모든 오브젝트의 베이스 클래스입니다. 인스턴스화해서는 안됩니다. """ \_\_slots\_\_ = ("pos", "size", "window", "id", "components", "behavior", "\_\_on\_draw", "parent") def \_\_init\_\_( self,  pos: Pos | 이터러블[측정], size: Size | Iterable[Measure], 스타일: Optional[Styles] = None, parent: Optional["Object"] = None, 구성 요소: Iterable[Component] = [], \*\*\_styles: Dict[str, Any] ): """ 대부분의 객체, 핸들러 객체 기본값 및 필수 동작을 위한 베이스 클래스 """ self.window = get\_window() self.id = get\_id()  self.parent = 부모 또는 self.window  self.styles = styles 또는 Styles(\*\*\_styles)  # 스타일 해결  self.styles.resolve(self.parent.size)  self.size = resolve\_size(self, size, self.parent.size) self.pos = resolve\_position(self, pos, self.parent) # 잘못된 동작 - 자체 유형과 재작업 필요 self.behavior = {"pos": "동적"} self.\_\_on\_draw = {} self.components = ComponentGroup(self, \*components) # draw() 전에 \_\_after\_draw()를 호출하여 그리기 메서드에서 호출합니다. def \_draw\_manager(draw\_func): def wrapper(): if self.styles.visible: draw\_func()   self.\_\_after\_draw()  반환 래퍼 try: self.draw = \_draw\_manager(self.draw) 예외 pass def extends(self, \*classes): r""" #### 주어진 클래스의 프로퍼티와 메서드를 현재 객체로 확장합니다. 참고: 이 함수는 `extend()` 메서드가 있는 클래스에서만 사용할 수 있습니다. #### 파라미터 - classes`: 확장할 클래스(\*args) """ 클래스의 cls에 대해: if hasattr(cls, "extend"): self = cls.extend(self) else: raise TypeError("{} 클래스를 확장할 수 없습니다.".format(cls)) 반환 self def on\_draw(self, func, name: str = "Default", pass\_object=False): r""" #### 객체가 그려진 후 호출할 함수를 추가합니다. #### 파라미터 - func`: 호출할 함수 - name`: 함수 이름(기본값: `함수 이름`) - pass\_object`: True이면 객체를 첫 번째 매개변수로 사용하여 함수를 호출합니다. """ name = 이름이면 이름 else func.\_\_name\_\_ self.\_\_on\_draw[name] = lambda: func(self) if pass\_object else func def remove\_on\_draw(self, name: str): r""" #### 객체가 그려진 후 호출되는 함수를 제거합니다. #### 파라미터 - name`: 함수 이름 """ self.\_\_on\_draw에 이름이 있으면 del self.\_\_on\_draw[name] def \_get\_collision\_box(self): x, y = self.pos w, h = self.size return [(x, y), (x + w, y), (x, y + h), (x + w, y + h)] def \_\_str\_\_(self): RETURN F"" def \_\_after\_draw(self): r''' 객체 그리기 메서드를 관리하고 `on\_draw` 함수를 호출합니다. ''' for func in self.\_\_on\_draw.values(): func()    def center\_at(self, parent = None, x: bool = True, y: bool = True) -> Self: r''' #### 부모 객체에서 객체를 중앙에 배치합니다. - parent : 객체 -> 부모 객체 - x -> if True, x축 중심 - y -> if True, y축 중심 '''  부모가 아닌 경우: parent = self.parent  if x: self.pos[0] = parent.pos[0] + (parent.size[0] - self.size[0]) / 2 if y: self.pos[1] = parent.pos[1] + (parent.size[1] - self.size[1]) / 2  반환 self