1 | initial version |

I do not think it is easy without modifying Sage source code.

One problem is that most matrix classes are so called "extension class" with read-only attributes

```
sage: m = matrix([2])
sage: m.new_attr = 3
Traceback (most recent call last):
...
AttributeError: 'sage.matrix.matrix_integer_dense.Matrix_integer_dense' object has no attribute 'new_attr'
```

To be compared with

```
sage: p = Permutation([3,2,1])
sage: p.new_attr = 3
sage: print p.new_attr
3
```

You would have been able to do it on permutations via

```
sage: p = Permutation([3,2,1])
sage: p.__class__.new_method = lambda s: 1
sage: p.new_method() # it works!
1
sage: q = Permutation([4,3,2,1])
sage: q.new_method() # it also works!
1
```

But this approach would also fail for matrices since there are many classes of matrices.

2 | No.2 Revision |

[EDIT] First of all there is a stupid reason for that. The method call is implemented as a componentwise call as in

```
sage: m = matrix(2, [cos(x), sin(x), -sin(x), cos(x)])
sage: m(pi/4)
<A TON OF WARNINGS>
[ 1/2*sqrt(2) 1/2*sqrt(2)]
[-1/2*sqrt(2) 1/2*sqrt(2)]
```

The above behavior is incompatible with having m(v) returning m*v for vectors v (because you might have functions that accept vectors as input). Whether the current behavior is desirable I do not know.

[ORIGINAL ANSWER] Then, I do not think it is easy without modifying Sage source code.

One problem is that most matrix classes are so called "extension class" with read-only attributes

```
sage: m = matrix([2])
sage: m.new_attr = 3
Traceback (most recent call last):
...
AttributeError: 'sage.matrix.matrix_integer_dense.Matrix_integer_dense' object has no attribute 'new_attr'
```

To be compared with

```
sage: p = Permutation([3,2,1])
sage: p.new_attr = 3
sage: print p.new_attr
3
```

You would have been able to do it on permutations via

```
sage: p = Permutation([3,2,1])
sage: p.__class__.new_method = lambda s: 1
sage: p.new_method() # it works!
1
sage: q = Permutation([4,3,2,1])
sage: q.new_method() # it also works!
1
```

But this approach would also fail for matrices since there are many classes of matrices.

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.