code: def after_update(
      cls,
      _mapper: Mapper,
      connection: Connection,
      target: Dashboard | FavStar | Slice | Query | SqlaTable,
  ) -> None:
      with Session(bind=connection) as session:
          # delete current `owner:` tags
          query = (
              session.query(TaggedObject.id)
              .join(Tag)
              .filter(
                  TaggedObject.object_type == cls.object_type,
                  TaggedObject.object_id == target.id,
                  Tag.type == TagType.owner,
              )
          )
          ids = [row[0] for row in query]
          session.query(TaggedObject).filter(
              TaggedObject.id.in_(ids)
          ).delete(synchronize_session=False)
  
          # add `owner:` tags
          cls._add_owners(session, target)
          session.commit()
  
imports: from __future__ import annotations
  import enum
  from typing import TYPE_CHECKING
  from flask import escape
  from flask_appbuilder import Model
  from sqlalchemy import Column, Enum, ForeignKey, Integer, orm, String, Table, Text
  from sqlalchemy.engine.base import Connection
  from sqlalchemy.orm import relationship, sessionmaker
  from sqlalchemy.orm.mapper import Mapper
  from superset import security_manager
  from superset.models.helpers import AuditMixinNullable
label_desc: Use image node_id 4 for calling the ObjectUpdater obj's underlying member method code with example usage: obj.after_update(cls, _mapper, connection, target) without return types