code: def frameclass(cls):
      
      assert issubclass(cls, Frames.Frame)
  
      # Register v2.2 versions of v2.3/v2.4 frames if encoded by inheritance.
      if len(cls.__name__) == 3:
          base = cls.__bases__[0]
          if issubclass(base, Frames.Frame) and base._in_version(3, 4):
              assert not hasattr(base, "_v2_frame")
              base._v2_frame = cls
              # Override frameid from base with v2.2 name
              if base.frameid == cls.frameid:
                  cls.frameid = cls.__name__
  
      # Add frameid.
      if not hasattr(cls, "frameid"):
          cls.frameid = cls.__name__
      assert Tag._is_frame_id(cls.frameid)
  
      # Supply _version attribute if missing.
      if len(cls.frameid) == 3:
          cls._version = 2
      if len(cls.frameid) == 4 and not cls._version:
          cls._version = (3, 4)
  
      # Register cls as a known frame.
      assert cls.frameid not in Tag.known_frames
      Tag.known_frames[cls.frameid] = cls
      
      return cls
docs: Register cls as a class representing an ID3 frame.
  
      Sets cls.frameid and cls._version if not present, and registers the
      new frame in Tag's known_frames dictionary.
  
      To be used as a decorator on the class definition:
  
      @frameclass
      class UFID(Frame):
          _framespec = (NullTerminatedStringSpec("owner"), BinaryDataSpec("data"))