docs: def __validate(self, oid):
          """Validate and use the given id for this ObjectId.
  
          Raises TypeError if id is not an instance of
          (:class:`basestring` (:class:`str` or :class:`bytes`
          in python 3), ObjectId) and InvalidId if it is not a
          valid ObjectId.
  
          :Parameters:
            - `oid`: a valid ObjectId
          """
          if isinstance(oid, ObjectId):
              self.__id = oid.binary
          # bytes or unicode in python 2, str in python 3
          elif isinstance(oid, string_type):
              if len(oid) == 24:
                  try:
                      self.__id = bytes_from_hex(oid)
                  except (TypeError, ValueError):
                      _raise_invalid_id(oid)
              else:
                  _raise_invalid_id(oid)
          else:
              raise TypeError("id must be an instance of (bytes, %s, ObjectId), "
                              "not %s" % (text_type.__name__, type(oid)))