Do we not have pointwise multiplication and division of dats by dats?  IOW, can you not also have a:

```python
        if isinstance(expr, Function) and \
                expr._function_space == self._function_space:
            self.dat *= expr.dat
            return self
```

piece?