text: from .Behaviour import Behaviour
  from .PPtr import PPtr, save_ptr
  from ..streams import EndianBinaryReader, EndianBinaryWriter
  
  
  class MonoBehaviour(Behaviour):
      def __init__(self, reader: EndianBinaryReader):
          super().__init__(reader=reader)
          self.m_Script = PPtr(reader)
          self.name = reader.read_aligned_string()
  
          self._raw_offset = reader.Position
          if self.assets_file._enable_type_tree:
              self.read_typetree()
  
      def save(self, writer: EndianBinaryWriter = None, raw_data: bytes = None):
          if writer is None:
              writer = EndianBinaryWriter(endian=self.reader.endian)
          if not raw_data:
              ValueError("No raw data given")
          
          super().save(writer)
          save_ptr(self.m_Script, writer)
          writer.write_aligned_string(self.name)
          writer.write(raw_data)
          
          self.set_raw_data(writer.bytes)
  
      @property
      def raw_data(self) -> bytes:
          """
          Reads the undocumentated data following the default init.
          This is usefull for classes that are stored via MonoBehaviours.
          """
          reader = self.reader
          reader.Position = self._raw_offset
          return reader.read_bytes(reader.byte_size - (self._raw_offset - reader.byte_start))
  