docs: def change_data_type(self, data_type, default_value=None):
          """This method changes both the data type and default value. If one of the parameters does not fit,
          an exception is thrown and no property is changed. Using this method ensures a consistent data type
          and default value and only notifies once.
  
          :param data_type: The new data type
          :param default_value: The new default value
          :return:
          """
          old_data_type = self.data_type
          self.data_type = data_type
  
          if default_value is None:
              default_value = self.default_value
  
          if type_helpers.type_inherits_of_type(type(default_value), self._data_type):
              self._default_value = default_value
          else:
  
              if old_data_type.__name__ == "float" and data_type == "int":
                  if self.default_value:
                      self._default_value = int(default_value)
                  else:
                      self._default_value = 0
              elif old_data_type.__name__ == "int" and data_type == "float":
                  if self.default_value:
                      self._default_value = float(default_value)
                  else:
                      self._default_value = 0.0
              else:
                  self._default_value = None