docs: def get(self, name=None, default=None):
          """
          Get attribute value or return default
  
          Whole data dictionary is returned when no attribute provided.
          Supports direct values retrieval from deep dictionaries as well.
          Dictionary path should be provided as list. The following two
          examples are equal:
  
          tree.data['hardware']['memory']['size']
          tree.get(['hardware', 'memory', 'size'])
  
          However the latter approach will also correctly handle providing
          default value when any of the dictionary keys does not exist.
  
          """
          # Return the whole dictionary if no attribute specified
          if name is None:
              return self.data
          if not isinstance(name, list):
              name = [name]
          data = self.data
          try:
              for key in name:
                  data = data[key]
          except KeyError:
              return default
          return data