Monkeypatching a staticmethod?
Roy Smith
roy at panix.com
Fri Jan 10 00:23:11 EST 2014
This is kind of surprising. I'm running Python 2.7.1. I've got a class
with a staticmethod that I want to monkeypatch with a lambda:
----------------------------------
class Foo:
@staticmethod
def x():
return 1
Foo.x = lambda: 2
print Foo.x()
----------------------------------
What's weird is that it seems to remember that x is a staticmethod
despite having been patched:
Traceback (most recent call last):
File "static.py", line 8, in <module>
Foo.x()
TypeError: unbound method <lambda>() must be called with Foo instance as
first argument (got nothing instead)
What seems to work is to patch it with another staticmethod:
----------------------------------
class Foo:
@staticmethod
def x():
return 1
@staticmethod
def x():
return 2
Foo.x = x
print Foo.x()
----------------------------------
$ python static.py
2
I didn't even know you could define a staticmethod outside of a class!
I suspect this post is really just my way of admitting that while I've
used staticmethods plenty, I've never fully understood the details of
what happens when you construct them :-)
More information about the Python-list
mailing list