G
Gregory Bond
I'm building a class hierarchy that needs to keep as a class variable a
reference to a (non-member) function, so that different subclasses can
use different generator functions. But it seems Python is treating the
function as a member function because the reference to it is in class
scope....
Here's a simple case of what I'm trying (in the real code, fn is a
function that returns a database connection relevant to that subclass):
[I'm on python 2.3.4 so no @classmethod decorator! ]
When I run this:
This shows it is trying to do what I expect (call foo2()) but somehow
the type is all wrong.
I've tried playing with staticmethod() but I can't quite get it all
worked out...
reference to a (non-member) function, so that different subclasses can
use different generator functions. But it seems Python is treating the
function as a member function because the reference to it is in class
scope....
Here's a simple case of what I'm trying (in the real code, fn is a
function that returns a database connection relevant to that subclass):
def foo():
print "foo called"
class S(object):
fn = foo
def bar(cls):
cls.fn()
bar = classmethod(bar)
def foo2():
print "foo2 called"
class D(S):
fn = foo2
D.bar()
[I'm on python 2.3.4 so no @classmethod decorator! ]
When I run this:
Traceback (most recent call last):
File "t_o.py", line 19, in ?
D.bar()
File "t_o.py", line 10, in bar
cls.fn()
TypeError: unbound method foo2() must be called with D instance as first argument (got nothing instead)
This shows it is trying to do what I expect (call foo2()) but somehow
the type is all wrong.
I've tried playing with staticmethod() but I can't quite get it all
worked out...