class_docstr: TFX artifact used for orchestration.
  
  This is used for type-checking and inter-component communication. Currently,
  it wraps a tuple of (ml_metadata.proto.Artifact,
  ml_metadata.proto.ArtifactType) with additional property accessors for
  internal state.
  
  A user may create a subclass of Artifact and override the TYPE_NAME property
  with the type for this artifact subclass. Users of the subclass may then omit
  the "type_name" field when construction the object.
  
  A user may specify artifact type-specific properties for an Artifact subclass
  by overriding the PROPERTIES dictionary, as detailed below.
  
  Note: the behavior of this class is experimental, without backwards
  compatibility guarantees, and may change in upcoming releases.
class_docstr_tok: ["TFX","artifact","used","for","orchestration",".","This","is","used","for","type-checking","and","inter-component","communication",".","Currently",",","it","wraps","a","tuple","of","(","ml_metadata.proto.Artifact",",","ml_metadata.proto.ArtifactType",")","with","additional","property","accessors","for","internal","state",".","A","user","may","create","a","subclass","of","Artifact","and","override","the","TYPE_NAME","property","with","the","type","for","this","artifact","subclass",".","Users","of","the","subclass","may","then","omit","the","``","type_name","''","field","when","construction","the","object",".","A","user","may","specify","artifact","type-specific","properties","for","an","Artifact","subclass","by","overriding","the","PROPERTIES","dictionary",",","as","detailed","below",".","Note",":","the","behavior","of","this","class","is","experimental",",","without","backwards","compatibility","guarantees",",","and","may","change","in","upcoming","releases","."]
code: def _set_system_property(self, key: str, value: str):
      if (
          key in self._artifact_type.properties
          and key in self._artifact.properties
      ):
          # Clear non-custom property in legacy artifact types.
          del self._artifact.properties[key]
      self._artifact.custom_properties[key].string_value = value
  
imports: import builtins
  import copy
  import importlib
  import json
  from typing import Any, Dict, List, Optional, Type, Union
  from absl import logging
  from tfx.types import artifact_property
  from tfx.types.system_artifacts import SystemArtifact
  from tfx.utils import doc_controls
  from tfx.utils import json_utils
  from tfx.utils import proto_utils
  from google.protobuf import struct_pb2
  from google.protobuf import json_format
  from google.protobuf import message
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 21 for calling the Artifact obj's underlying member method code with example usage: obj._set_system_property(key, value) without return types