code: def Item(**kwargs):
      
  
      parent = kwargs.pop("parent", None)
      cls = type("Item", (AbstractItem,), kwargs.copy())
  
      self = cls(parent)
      self.json = kwargs  # Store as json
  
      for key, value in kwargs.items():
          if hasattr(self, key):
              key = PropertyType.prefix + key
          setattr(self, key, value)
  
      return self
docs: Factory function for QAbstractListModel items
  
      Any class attributes are converted into pyqtProperties
      and must be declared with its type as value.
  
      Special keyword "parent" is not passed as object properties
      but instead passed to the QObject constructor.
  
      Usage:
          >>> item = Item(name="default name",
          ...             age=5,
          ...             alive=True)
          >>> assert item.name == "default name"
          >>> assert item.age == 5
          >>> assert item.alive == True
          >>>
          >>> # Jsonifyable content
          >>> assert item.json == {
          ...     "name": "default name",
          ...     "age": 5,
          ...     "alive": True
          ...     }, item.json