class_docstr: ``_TruncatedDataLoader`` 用于实现 ``Trainer`` 和 ``Evaluator`` 中的 '预跑' 和 '假跑' 功能：
  
      1. 预跑 是针对 trainer 的验证而言的，即我们在正式的训练前会先使用 trainer 内置的 evaluator（如果不为 None）评测数量非常少的数据，
      来检验用户的 metric 和 evaluate_dataloader 以及模型是否能够合作完成正确的评测过程；
      2. 假跑 的意思是改变每一个 epoch 中训练或者评测的实际的 batch 的数量，例如改成 10，来让模型快速地迭代整体的训练或者评测流程，来查看
      整体的过程的正确性；
  
  ``_TruncatedDataLoader`` 的实现也非常简单，我们在该类中内置一个计数器，当迭代器的迭代数量达到指定数值后 ``raise StopIteration``；
  
  :param dataloader: 可迭代的 dataloader 。
  :param num_batches: 迭代多少个 batch 就停止。
code: def __setattr__(self, key, value):
      # 添加该函数使得在进行实验性训练或者评测时，用户对于 trainer.dataloader 的感觉和正常训练完全一样；
      # 注意这里不能直接 ``setattr(self.dataloader, key, value)``，会导致死循环；
      if "dataloader" in self.__dict__:
          if hasattr(self.dataloader, key):
              setattr(self.dataloader, key, value)
          else:
              self.__dict__[key] = value
      else:
          self.__dict__[key] = value
  
imports: from typing import Dict
  from fastNLP.core.callbacks import CallbackManager
  from .state import TrainerState
  from fastNLP.core.utils.utils import _check_valid_parameters_number
label_desc: Use image node_id 6 for calling the _TruncatedDataLoader obj's underlying member method code with example usage: obj.__setattr__(key, value) without return types