code: def __post_init__(self) -> None:
      """Set some computed values derived from main_script_path.
  
      The usage of object.__setattr__ is necessary because trying to set
      self.script_folder or self.name normally, even within the __init__ method, will
      explode since we declared this dataclass to be frozen.
  
      We do this in __post_init__ so that we can use the auto-generated __init__
      method that most dataclasses use.
      """
      main_script_path = os.path.abspath(self.main_script_path)
      script_folder = os.path.dirname(main_script_path)
      object.__setattr__(self, "script_folder", script_folder)
  
      basename = os.path.basename(main_script_path)
      name = str(os.path.splitext(basename)[0])
      object.__setattr__(self, "name", name)
  
imports: import os
  from dataclasses import dataclass, field
label_desc: Use image node_id 1 for calling the ScriptData obj's underlying member method code with example usage: obj.__post_init__() without return types