Obtaining a callable class method object from a specific class
Nathan Duran
cocoa at khiltd.com
Thu Apr 10 17:41:22 EDT 2008
On Apr 10, 2008, at 1:25 PM, python-list-request at python.org wrote:
> won't question why you want to do this...
> Here is a solution base on a metaclass, but it feels wrong.
> class MetaScore(type):
> def __new__(meta, name, bases, attrs):
> attrs.setdefault('score', score)
> return type.__new__(meta, name, bases, attrs)
So you're saying to get rid of the inherited __dict__ entry altogether
when the class is defined? I'm worried that this might be somewhat
problematic since there's actually quite a lot of metaclass interplay
going on already that might lead to one stepping on another's toes,
but I may give it a shot.
Some more digging with different keywords turned up this obscure nugget:
http://docs.python.org/ref/types.html
"When a user-defined method object is created by retrieving a class
method object from a class or instance, its im_self attribute is the
class itself (the same as the im_class attribute), and its
im_funcattribute is the function object underlying the class method."
I was under the impression that these were completely unbound, but it
looks like I was misinformed. This appears to do what I need it to,
but further testing is in order:
matchfunc = getattr(base, "Score", None)
if matchfunc and matchfunc.im_self == base:
score += matchfunc(arg)
More information about the Python-list
mailing list