'classmethod' object has only read-only attributes
Peter Otten
__peter__ at web.de
Wed Nov 25 09:30:21 EST 2009
Thomas Guettler wrote:
> Hi,
>
> why have classmethods only readonly attributes? It works for other
> methods.
>
> exmpale code:
> {{{
> class Foo(object):
> @classmethod
> def bar(cls):
> pass
> bar.myattr='test'
> }}}
>
> user at host:~> python ~/tmp/t.py
> Traceback (most recent call last):
> File "/home/user/tmp/t.py", line 1, in <module>
> class Foo(object):
> File "/home/user/tmp/t.py", line 5, in Foo
> bar.myattr='test'
> TypeError: 'classmethod' object has only read-only attributes (assign to
> .myattr)
No idea. But here's a workaround:
>>> class A(object):
... def method(cls): print cls
... method.foo = 42
... method = classmethod(method)
...
>>> A.method()
<class '__main__.A'>
>>> A.method.foo
42
Or, going fancy:
>>> def attrs(**kw):
... def set(obj):
... for k, v in kw.iteritems():
... setattr(obj, k, v)
... return obj
... return set
...
>>> class A(object):
... @classmethod
... @attrs(foo=42)
... def method(cls): print cls
...
>>> A.method()
<class '__main__.A'>
>>> A().method.foo
42
Peter
More information about the Python-list
mailing list