Thanks,
Jeremy
Do you mean something like this ?
@classmethod
def foo(cls):
print "I am the foo classmethod on %r" % cls
class Foo(object):
pass
Foo.foo = foo
cheers
James
--
-- James Mills
--
-- "Problems are solved by method"
Slightly better:
def foo(cls):
# Do something
class Foo(object):
pass
Foo.foo = classmethod(foo)
This way the unbound foo is callable as well.
Cheers,
Ian
Thanks, James. That is almost exactly what I want. However, I want
to avoid doing
Foo.foo = foo
Is this going to be possible? I'm trying to understand how decorators
are used. Are they really necessary in this example?
Thanks,
Jeremy
<OT>
"assignement" or "binding" might be the terms you were looking for
here ;)
Also in Python we talk about "attributes", not "members"
</OT>
> of an instance of the class.
What you describe here will not "define class methods", nor even
instance methods FWIW - it will only make the function an attribute of
the instance, but won't turn the function into a method (IOW: the
function won't get the instance as first argument).
Also and while we're at it, a Python "classmethod" is something
special - it's a method that can be called on either an instance or
the class itself, and takes the class - not the instance - as first
argument.
> But,
> because of the complexity of what I'm doing (I have to set many
> functions as class methods) I would rather not do this. Can someone
> show me how to do this? Is it even possible?
To "no do this" ? Yes, certainly <g>
More seriously: if your problem is to dynamically add a bunch of
methods to an existing *class*, it's quite easy - just import the
class and assign your functions to it, ie:
from otherlib import OtherClass
def foo(self):
print "%s.foo" % self
OtherClass.foo = foo
And voila, The "foo" method is now available to all (even already
existing) instances of OtherClass.
If this doesn't answer your question, please provide more context.
> Can decorators be used
> here?
What for ?
def patch(cls):
def _patch(func):
setattr(cls, func.__name__, func)
return func
return _patch
class Foo(object): pass
@patch(Foo)
def bar(self):
print self
f = Foo()
f.bar()
> I'm trying to understand how decorators
> are used. Are they really necessary in this example?
In the above example, the classmethod type was used as a decorator to
turn the function into, well, a classmethod (read my other answer in
this thread if you don't know what a classmethod is).
Yes! This is what I was looking for. Thanks!
Jeremy