That's not quite right. While you're correct that lambda statements are restricted, I have never actually seen a lambda expression used to extend an object. Instead, you use a named function, which has none of these restrictions:
In [27]: class Foo(object):
....: pass
....:
In [28]: def hello(self):
....: print self
....:
In [29]: blah = Foo()
In [30]: blah.hello = hello.__get__(blah, Foo)
In [31]: blah.hello()
<__main__.Foo object at 0x10397f650>