class_docstr: Data from file should have a valid file path
  (are files on hard drive) and a name.
class_docstr_tok: ["Data","from","file","should","have","a","valid","file","path","(","are","files","on","hard","drive",")","and","a","name","."]
docstr: data type property of the input images.
  
  :return: a tuple of input image data types
      ``len(self.dtype) == len(self.file_path)``
docstr_tok: ["data","type","property","of","the","input","images",".",":","return",":","a","tuple","of","input","image","data","types","``","len","(","self.dtype",")","==","len","(","self.file_path",")","``"]
code: def dtype(self):
      """
      data type property of the input images.
  
      :return: a tuple of input image data types
          ``len(self.dtype) == len(self.file_path)``
      """
      if not self._dtype:
          try:
              self._dtype = tuple(
                  load_image_obj(_file, _loader).header.get_data_dtype()
                  for _file, _loader in zip(self.file_path, self.loader)
              )
          except (IOError, TypeError, AttributeError):
              tf.logging.warning("could not decide image data type")
              self._dtype = (np.dtype(np.float32),) * len(
                  self.file_path
              )
      return self._dtype
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  from abc import ABCMeta, abstractmethod
  import nibabel
  import numpy
  import tensorflow
  from six import with_metaclass, string_types
  import niftynet.io.misc_io
  from niftynet.io.image_loader import load_image_obj
  from niftynet.io.misc_io import resolve_file_name, dtype_casting
  from niftynet.utilities.niftynet_global_config import NiftyNetGlobalConfig
label_desc: Use image node_id 2 for calling the DataFromFile obj's underlying member method code with example usage: obj.dtype() and returns: self