<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def get_item(self):
        "If the item is publishable, get the visible version"

        if hasattr(self, 'get_draft'):
            draft = self.get_draft()
        else:
            draft = self

        if not hasattr(self, '_item_cache'):
            try:
                self._item_cache = draft.item.get_published_or_draft()
            except AttributeError:
                # not publishable
                self._item_cache = draft.item
        return self._item_cache